Commit d75c2287 authored by Robin Murphy's avatar Robin Murphy
Browse files

fixup! auxdisplay: add support for Titanmec TM1628 7 segment display controller

parent a328a6c9
...@@ -227,12 +227,16 @@ static const DEVICE_ATTR_RW(display_text); ...@@ -227,12 +227,16 @@ static const DEVICE_ATTR_RW(display_text);
static int tm1628_spi_probe(struct spi_device *spi) static int tm1628_spi_probe(struct spi_device *spi)
{ {
struct fwnode_handle *child; struct fwnode_handle *leds_node, *child;
unsigned int num_leds; unsigned int num_leds = 0;
struct tm1628 *s; struct tm1628 *s;
int ret, i; int ret, i;
num_leds = device_get_child_node_count(&spi->dev); leds_node = device_get_named_child_node(&spi->dev, "leds");
if (IS_REACHABLE(CONFIG_LEDS_CLASS)) {
fwnode_for_each_child_node(leds_node, child)
num_leds++;
}
s = devm_kzalloc(&spi->dev, struct_size(s, leds, num_leds), GFP_KERNEL); s = devm_kzalloc(&spi->dev, struct_size(s, leds, num_leds), GFP_KERNEL);
if (!s) if (!s)
...@@ -260,12 +264,11 @@ static int tm1628_spi_probe(struct spi_device *spi) ...@@ -260,12 +264,11 @@ static int tm1628_spi_probe(struct spi_device *spi)
if (ret) if (ret)
return ret; return ret;
num_leds = 0; if (num_leds == 0)
if (!IS_REACHABLE(CONFIG_LEDS_CLASS))
goto no_leds; goto no_leds;
device_for_each_child_node(&spi->dev, child) { i = 0;
fwnode_for_each_child_node(leds_node, child) {
u32 reg[2]; u32 reg[2];
ret = fwnode_property_read_u32_array(child, "reg", reg, 2); ret = fwnode_property_read_u32_array(child, "reg", reg, 2);
...@@ -287,16 +290,17 @@ static int tm1628_spi_probe(struct spi_device *spi) ...@@ -287,16 +290,17 @@ static int tm1628_spi_probe(struct spi_device *spi)
continue; continue;
} }
ret = tm1628_register_led(s, child, reg[0], reg[1], s->leds + num_leds); ret = tm1628_register_led(s, child, reg[0], reg[1], s->leds + i);
if (ret) { if (ret) {
dev_err(&spi->dev, "Failed to register LED %s (%d)\n", dev_err(&spi->dev, "Failed to register LED %s (%d)\n",
fwnode_get_name(child), ret); fwnode_get_name(child), ret);
continue; continue;
} }
num_leds++; i++;
} }
no_leds: no_leds:
fwnode_handle_put(leds_node);
ret = device_property_count_u8(&spi->dev, "titanmec,grid"); ret = device_property_count_u8(&spi->dev, "titanmec,grid");
if (ret < 1 || ret > MAX_GRID_SIZE) { if (ret < 1 || ret > MAX_GRID_SIZE) {
dev_err(&spi->dev, "Invalid display length (%d)\n", ret); dev_err(&spi->dev, "Invalid display length (%d)\n", ret);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment