xref: /linux/drivers/media/platform/dreamchip/rppx1/rppx1_bd.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 "rpp_module.h"
9*b562e72bSNiklas Söderlund 
10*b562e72bSNiklas Söderlund #define DPF_VERSION_REG			0x0000
11*b562e72bSNiklas Söderlund 
12*b562e72bSNiklas Söderlund #define DPF_MODE_REG			0x0004
13*b562e72bSNiklas Söderlund #define DPF_MODE_USE_NF_GAIN		BIT(9)
14*b562e72bSNiklas Söderlund #define DPF_MODE_LSC_GAIN_COMP		BIT(8)
15*b562e72bSNiklas Söderlund #define DPF_MODE_NLL_SEGMENTATION	BIT(6)
16*b562e72bSNiklas Söderlund #define DPF_MODE_RB_FILTER_SIZE		BIT(5)
17*b562e72bSNiklas Söderlund #define DPF_MODE_R_FILTER_OFF		BIT(4)
18*b562e72bSNiklas Söderlund #define DPF_MODE_GR_FILTER_OFF		BIT(3)
19*b562e72bSNiklas Söderlund #define DPF_MODE_GB_FILTER_OFF		BIT(2)
20*b562e72bSNiklas Söderlund #define DPF_MODE_B_FILTER_OFF		BIT(1)
21*b562e72bSNiklas Söderlund #define DPF_MODE_DPF_ENABLE		BIT(0)
22*b562e72bSNiklas Söderlund 
23*b562e72bSNiklas Söderlund #define DPF_STRENGTH_R_REG		0x0008
24*b562e72bSNiklas Söderlund #define DPF_STRENGTH_G_REG		0x000c
25*b562e72bSNiklas Söderlund #define DPF_STRENGTH_B_REG		0x0010
26*b562e72bSNiklas Söderlund #define DPF_S_WEIGHT_G_1_4_REG		0x0014
27*b562e72bSNiklas Söderlund #define DPF_S_WEIGHT_G_5_6_REG		0x0018
28*b562e72bSNiklas Söderlund #define DPF_S_WEIGHT_RB_1_4_REG		0x001c
29*b562e72bSNiklas Söderlund #define DPF_S_WEIGHT_RB_5_6_REG		0x0020
30*b562e72bSNiklas Söderlund 
31*b562e72bSNiklas Söderlund #define DPF_NLL_G_COEFF_REG_NUM		17
32*b562e72bSNiklas Söderlund #define DPF_NLL_G_COEFF_REG(n)		(0x0024 + (4 * (n)))
33*b562e72bSNiklas Söderlund 
34*b562e72bSNiklas Söderlund #define DPF_NLL_RB_COEFF_REG_NUM	17
35*b562e72bSNiklas Söderlund #define DPF_NLL_RB_COEFF_REG(n)		(0x0068 + (4 * (n)))
36*b562e72bSNiklas Söderlund 
37*b562e72bSNiklas Söderlund #define DPF_NF_GAIN_R_REG		0x00ac
38*b562e72bSNiklas Söderlund #define DPF_NF_GAIN_GR_REG		0x00b0
39*b562e72bSNiklas Söderlund #define DPF_NF_GAIN_GB_REG		0x00b4
40*b562e72bSNiklas Söderlund #define DPF_NF_GAIN_B_REG		0x00b8
41*b562e72bSNiklas Söderlund 
42*b562e72bSNiklas Söderlund static int rppx1_bd_probe(struct rpp_module *mod)
43*b562e72bSNiklas Söderlund {
44*b562e72bSNiklas Söderlund 	/* Version check. */
45*b562e72bSNiklas Söderlund 	if (rpp_module_read(mod, DPF_VERSION_REG) != 5)
46*b562e72bSNiklas Söderlund 		return -EINVAL;
47*b562e72bSNiklas Söderlund 
48*b562e72bSNiklas Söderlund 	return 0;
49*b562e72bSNiklas Söderlund }
50*b562e72bSNiklas Söderlund 
51*b562e72bSNiklas Söderlund const struct rpp_module_ops rppx1_bd_ops = {
52*b562e72bSNiklas Söderlund 	.probe = rppx1_bd_probe,
53*b562e72bSNiklas Söderlund };
54