xref: /linux/drivers/media/platform/dreamchip/rppx1/rpp_module.c (revision f4cdf7ca9a1fdcca413157df19753f388a5a224e)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2026 Renesas Electronics Corp.
4  * Copyright (C) 2026 Ideas on Board Oy
5  * Copyright (C) 2026 Ragnatech AB
6  */
7 
8 #include "rppx1.h"
9 #include "rpp_module.h"
10 
11 int rpp_module_probe(struct rpp_module *mod, struct rppx1 *rpp,
12 		     const struct rpp_module_ops *ops, u32 base)
13 {
14 	mod->rpp = rpp;
15 	mod->base = base;
16 	mod->ops = ops;
17 
18 	if (ops->probe)
19 		return ops->probe(mod);
20 
21 	return 0;
22 }
23 
24 void rpp_module_write(struct rpp_module *mod, u32 offset, u32 value)
25 {
26 	rppx1_write(mod->rpp, mod->base + offset, value);
27 }
28 
29 u32 rpp_module_read(struct rpp_module *mod, u32 offset)
30 {
31 	return rppx1_read(mod->rpp, mod->base + offset);
32 }
33 
34 void rpp_module_clrset(struct rpp_module *mod, u32 offset, u32 mask, u32 value)
35 {
36 	u32 reg = rpp_module_read(mod, offset) & ~mask;
37 
38 	rpp_module_write(mod, offset, reg | value);
39 }
40