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