[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260106-opalescent-wildcat-from-venus-feffa7@quoll>
Date: Tue, 6 Jan 2026 09:14:17 +0100
From: Krzysztof Kozlowski <krzk@...nel.org>
To: Edelweise Escala <edelweise.escala@...log.com>
Cc: Lee Jones <lee@...nel.org>, Pavel Machek <pavel@...nel.org>,
Rob Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>, linux-leds@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/2] leds: ltc3220: add driver
On Tue, Jan 06, 2026 at 01:27:08PM +0800, Edelweise Escala wrote:
> +
> +static int ltc3220_probe(struct i2c_client *client)
> +{
> + struct ltc3220_state *ltc3220_state;
> + u8 i = 0;
> + int ret;
> +
> + if (!i2c_check_functionality(client->adapter,
> + I2C_FUNC_SMBUS_BYTE_DATA))
Odd wrapping.
> + return dev_err_probe(&client->dev, -EIO,
> + "SMBUS Byte Data not Supported\n");
> +
> + ltc3220_state = devm_kzalloc(&client->dev, sizeof(*ltc3220_state), GFP_KERNEL);
> + if (!ltc3220_state)
> + return -ENOMEM;
> +
> + ltc3220_state->client = client;
> + i2c_set_clientdata(client, ltc3220_state);
> +
> + if (device_property_read_bool(&client->dev, "adi,quick-write"))
> + ltc3220_state->command_cfg.quick_write = true;
> +
> + ret = ltc3220_reset(ltc3220_state, client);
> + if (ret)
> + return dev_err_probe(&client->dev, ret,
> + "Failed to reset device\n");
Your code is not really readable.
> +
> + ret = device_property_match_property_string(&client->dev, "adi,force-cpo-level",
> + ltc3220_cpo_levels, ARRAY_SIZE(ltc3220_cpo_levels));
> + if (ret >= 0)
> + ltc3220_state->command_cfg.force_cpo_level = ret;
> +
> + ret = ltc3220_set_command(ltc3220_state);
> + if (ret < 0)
> + return dev_err_probe(&client->dev, ret,
> + "Failed to set command\n");
> +
> + device_for_each_child_node_scoped(&client->dev, child) {
> + struct led_init_data init_data = {};
> + struct ltc3220_uled_cfg *led;
> + u32 source;
> +
> + ret = fwnode_property_read_u32(child, "reg", &source);
> + if (ret)
> + return dev_err_probe(&client->dev, ret,
> + "Couldn't read LED address\n");
> +
> + if (!source || source > LTC3220_NUM_LEDS)
> + return dev_err_probe(&client->dev, -EINVAL,
> + "LED address out of range\n");
> +
> + init_data.fwnode = child;
> + init_data.devicename = "ltc3220";
> + init_data.devname_mandatory = true;
> +
> + /* LED node reg/index/address goes from 1 to 18 */
> + i = source - 1;
> + led = <c3220_state->uled_cfg[i];
> + led->led_index = i;
> + led->reg_value = 0;
> + led->ltc3220_state = ltc3220_state;
> + led->led_cdev.brightness_set_blocking = ltc3220_set_led_data;
> + led->led_cdev.brightness_get = ltc3220_get_led_data;
> + led->led_cdev.max_brightness = 255;
> + led->led_cdev.blink_set = ltc3220_blink_set;
> + led->led_cdev.pattern_set = ltc3220_pattern_set;
> + led->led_cdev.pattern_clear = ltc3220_pattern_clear;
> +
> + ret = devm_led_classdev_register_ext(&client->dev,
> + &led->led_cdev,
> + &init_data);
> + if (ret)
> + return dev_err_probe(&client->dev, ret,
> + "Failed to register LED class device\n");
> + }
> +
> + return 0;
> +}
> +
> +static const struct of_device_id ltc3220_of_match[] = {
> + { .compatible = "adi,ltc3220", },
> + { .compatible = "adi,ltc3220-1", },
Why do you have this "-1"? Even if this was a real hardware, devices are
clearly compatible based on above.
Best regards,
Krzysztof
Powered by blists - more mailing lists