diff mbox series

[3/4] backlight: ktz8866: improve current sinks setting

Message ID 20250407095119.588920-4-mitltlatltl@gmail.com
State New
Headers show
Series backlight: ktz8866: improve it and support slave | expand

Commit Message

Pengyu Luo April 7, 2025, 9:51 a.m. UTC
I polled all registers when the module was loading, found that
current sinks have already been configured. Bootloader would set
when booting. So checking it before setting the all channels.

Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
---
 drivers/video/backlight/ktz8866.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

Comments

kernel test robot April 8, 2025, 3:45 a.m. UTC | #1
Hi Pengyu,

kernel test robot noticed the following build errors:

[auto build test ERROR on lee-backlight/for-backlight-next]
[also build test ERROR on lee-leds/for-leds-next lee-backlight/for-backlight-fixes linus/master v6.15-rc1 next-20250407]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Pengyu-Luo/dt-bindings-backlight-kinetic-ktz8866-add-ktz8866-slave-compatible/20250407-175635
base:   https://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight.git for-backlight-next
patch link:    https://lore.kernel.org/r/20250407095119.588920-4-mitltlatltl%40gmail.com
patch subject: [PATCH 3/4] backlight: ktz8866: improve current sinks setting
config: riscv-randconfig-002-20250408 (https://download.01.org/0day-ci/archive/20250408/202504081109.E7PjHxpa-lkp@intel.com/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 92c93f5286b9ff33f27ff694d2dc33da1c07afdd)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250408/202504081109.E7PjHxpa-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504081109.E7PjHxpa-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

>> drivers/video/backlight/ktz8866.c:73:32: error: incompatible pointer types passing 'unsigned int **' to parameter of type 'unsigned int *'; remove & [-Werror,-Wincompatible-pointer-types]
      73 |         regmap_read(ktz->regmap, reg, &val);
         |                                       ^~~~
   include/linux/regmap.h:1297:69: note: passing argument to parameter 'val' here
    1297 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
         |                                                                     ^
>> drivers/video/backlight/ktz8866.c:132:13: warning: use of logical '&&' with constant operand [-Wconstant-logical-operand]
     132 |                 if (!(val && CURRENT_SINKS_MASK))
         |                           ^  ~~~~~~~~~~~~~~~~~~
   drivers/video/backlight/ktz8866.c:132:13: note: use '&' for a bitwise operation
     132 |                 if (!(val && CURRENT_SINKS_MASK))
         |                           ^~
         |                           &
   drivers/video/backlight/ktz8866.c:132:13: note: remove constant to silence this warning
     132 |                 if (!(val && CURRENT_SINKS_MASK))
         |                           ^~~~~~~~~~~~~~~~~~~~~
   1 warning and 1 error generated.


vim +73 drivers/video/backlight/ktz8866.c

    69	
    70	static inline void ktz8866_read(struct ktz8866 *ktz, unsigned int reg,
    71					unsigned int *val)
    72	{
  > 73		regmap_read(ktz->regmap, reg, &val);
    74	}
    75	
    76	static void ktz8866_write(struct ktz8866 *ktz, unsigned int reg,
    77				  unsigned int val)
    78	{
    79		regmap_write(ktz->regmap, reg, val);
    80	
    81		if (ktz->slave)
    82			regmap_write(ktz->slave->regmap, reg, val);
    83	}
    84	
    85	static void ktz8866_update_bits(struct ktz8866 *ktz, unsigned int reg,
    86					unsigned int mask, unsigned int val)
    87	{
    88		regmap_update_bits(ktz->regmap, reg, mask, val);
    89	
    90		if (ktz->slave)
    91			regmap_update_bits(ktz->slave->regmap, reg, mask, val);
    92	}
    93	
    94	static int ktz8866_backlight_update_status(struct backlight_device *backlight_dev)
    95	{
    96		struct ktz8866 *ktz = bl_get_data(backlight_dev);
    97		unsigned int brightness = backlight_get_brightness(backlight_dev);
    98	
    99		if (!ktz->led_on && brightness > 0) {
   100			ktz8866_update_bits(ktz, BL_EN, BL_EN_BIT, BL_EN_BIT);
   101			ktz->led_on = true;
   102		} else if (brightness == 0) {
   103			ktz8866_update_bits(ktz, BL_EN, BL_EN_BIT, 0);
   104			ktz->led_on = false;
   105		}
   106	
   107		/* Set brightness */
   108		ktz8866_write(ktz, BL_BRT_LSB, brightness & 0x7);
   109		ktz8866_write(ktz, BL_BRT_MSB, (brightness >> 3) & 0xFF);
   110	
   111		return 0;
   112	}
   113	
   114	static const struct backlight_ops ktz8866_backlight_ops = {
   115		.options = BL_CORE_SUSPENDRESUME,
   116		.update_status = ktz8866_backlight_update_status,
   117	};
   118	
   119	static void ktz8866_init(struct ktz8866 *ktz)
   120	{
   121		unsigned int val = 0;
   122	
   123		if (!of_property_read_u32(ktz->client->dev.of_node, "current-num-sinks", &val)) {
   124			ktz8866_write(ktz, BL_EN, BIT(val) - 1);
   125		} else {
   126			/*
   127			 * Enable all 6 current sinks if the number of current
   128			 * sinks isn't specified and the bootloader didn't set
   129			 * the value.
   130			 */
   131			ktz8866_read(ktz, BL_EN, &val);
 > 132			if (!(val && CURRENT_SINKS_MASK))
   133				ktz8866_write(ktz, BL_EN, CURRENT_SINKS_MASK);
   134		}
   135	
   136		if (!of_property_read_u32(ktz->client->dev.of_node, "kinetic,current-ramp-delay-ms", &val)) {
   137			if (val <= 128)
   138				ktz8866_write(ktz, BL_CFG2, BIT(7) | (ilog2(val) << 3) | PWM_HYST);
   139			else
   140				ktz8866_write(ktz, BL_CFG2, BIT(7) | ((5 + val / 64) << 3) | PWM_HYST);
   141		}
   142	
   143		if (!of_property_read_u32(ktz->client->dev.of_node, "kinetic,led-enable-ramp-delay-ms", &val)) {
   144			if (val == 0)
   145				ktz8866_write(ktz, BL_DIMMING, 0);
   146			else {
   147				unsigned int ramp_off_time = ilog2(val) + 1;
   148				unsigned int ramp_on_time = ramp_off_time << 4;
   149				ktz8866_write(ktz, BL_DIMMING, ramp_on_time | ramp_off_time);
   150			}
   151		}
   152	
   153		if (of_property_read_bool(ktz->client->dev.of_node, "kinetic,enable-lcd-bias"))
   154			ktz8866_write(ktz, LCD_BIAS_CFG1, LCD_BIAS_EN);
   155	}
   156
kernel test robot April 8, 2025, 3:55 a.m. UTC | #2
Hi Pengyu,

kernel test robot noticed the following build errors:

[auto build test ERROR on lee-backlight/for-backlight-next]
[also build test ERROR on lee-leds/for-leds-next lee-backlight/for-backlight-fixes linus/master v6.15-rc1 next-20250407]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Pengyu-Luo/dt-bindings-backlight-kinetic-ktz8866-add-ktz8866-slave-compatible/20250407-175635
base:   https://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight.git for-backlight-next
patch link:    https://lore.kernel.org/r/20250407095119.588920-4-mitltlatltl%40gmail.com
patch subject: [PATCH 3/4] backlight: ktz8866: improve current sinks setting
config: sparc64-randconfig-002-20250408 (https://download.01.org/0day-ci/archive/20250408/202504081106.mAYfJsQj-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250408/202504081106.mAYfJsQj-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504081106.mAYfJsQj-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/video/backlight/ktz8866.c: In function 'ktz8866_read':
>> drivers/video/backlight/ktz8866.c:73:39: error: passing argument 3 of 'regmap_read' from incompatible pointer type [-Wincompatible-pointer-types]
      73 |         regmap_read(ktz->regmap, reg, &val);
         |                                       ^~~~
         |                                       |
         |                                       unsigned int **
   In file included from drivers/video/backlight/ktz8866.c:17:
   include/linux/regmap.h:1297:69: note: expected 'unsigned int *' but argument is of type 'unsigned int **'
    1297 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
         |                                                       ~~~~~~~~~~~~~~^~~


vim +/regmap_read +73 drivers/video/backlight/ktz8866.c

    69	
    70	static inline void ktz8866_read(struct ktz8866 *ktz, unsigned int reg,
    71					unsigned int *val)
    72	{
  > 73		regmap_read(ktz->regmap, reg, &val);
    74	}
    75
diff mbox series

Patch

diff --git a/drivers/video/backlight/ktz8866.c b/drivers/video/backlight/ktz8866.c
index 017ad80dd..b67ca136d 100644
--- a/drivers/video/backlight/ktz8866.c
+++ b/drivers/video/backlight/ktz8866.c
@@ -46,6 +46,8 @@ 
 #define LCD_BIAS_EN 0x9F
 #define PWM_HYST 0x5
 
+#define CURRENT_SINKS_MASK GENMASK(5, 0)
+
 struct ktz8866_slave {
 	struct i2c_client *client;
 	struct regmap *regmap;
@@ -65,6 +67,12 @@  static const struct regmap_config ktz8866_regmap_config = {
 	.max_register = REG_MAX,
 };
 
+static inline void ktz8866_read(struct ktz8866 *ktz, unsigned int reg,
+				unsigned int *val)
+{
+	regmap_read(ktz->regmap, reg, &val);
+}
+
 static void ktz8866_write(struct ktz8866 *ktz, unsigned int reg,
 			  unsigned int val)
 {
@@ -112,11 +120,18 @@  static void ktz8866_init(struct ktz8866 *ktz)
 {
 	unsigned int val = 0;
 
-	if (!of_property_read_u32(ktz->client->dev.of_node, "current-num-sinks", &val))
+	if (!of_property_read_u32(ktz->client->dev.of_node, "current-num-sinks", &val)) {
 		ktz8866_write(ktz, BL_EN, BIT(val) - 1);
-	else
-		/* Enable all 6 current sinks if the number of current sinks isn't specified. */
-		ktz8866_write(ktz, BL_EN, BIT(6) - 1);
+	} else {
+		/*
+		 * Enable all 6 current sinks if the number of current
+		 * sinks isn't specified and the bootloader didn't set
+		 * the value.
+		 */
+		ktz8866_read(ktz, BL_EN, &val);
+		if (!(val && CURRENT_SINKS_MASK))
+			ktz8866_write(ktz, BL_EN, CURRENT_SINKS_MASK);
+	}
 
 	if (!of_property_read_u32(ktz->client->dev.of_node, "kinetic,current-ramp-delay-ms", &val)) {
 		if (val <= 128)