Thread (11 messages) 11 messages, 3 authors, 2026-01-08

RE: [PATCH 2/2] leds: ltc3220: add driver

From: Escala, Edelweise <hidden>
Date: 2026-01-07 09:52:42
Also in: linux-leds, lkml

On Tue, Jan 06, 2026 at 01:27:08PM +0800, Edelweise Escala wrote:
quoted
+
+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.
I will fix the wrapping.
quoted
+		return dev_err_probe(&client->dev, -EIO,
+				     "SMBUS Byte Data not Supported\n");
+
+	ltc3220_state = devm_kzalloc(&client->dev, sizeof(*ltc3220_state),
GFP_KERNEL);
quoted
+	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.
Do you mean the text wrapping? I will fix it.
quoted
+
+	ret = device_property_match_property_string(&client->dev,
"adi,force-cpo-level",
quoted
+					   ltc3220_cpo_levels,
ARRAY_SIZE(ltc3220_cpo_levels));
quoted
+	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 = &ltc3220_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;
quoted
+		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");
quoted
+	}
+
+	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.
I wil drop the -1

Best Regards,
Edelweise Escala
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help