[Letux-kernel] Pyra: is31fl319x V2 driver (RGB-LEDs)

H. Nikolaus Schaller hns at goldelico.com
Thu Jun 23 18:48:14 CEST 2016


Hi,
I did have this driver for a while on my to-do list time to finalise the feedbacks I got
for V1 from LKML.

The only unprocessed feedback was to use a regmap for optimizing the
i2c traffic and solving the issue that we must read back all LED brightness
values to determine if the chip can be shut down. But there is no i2c read
response for this chip. So regmap should cache the last value written.

With the lastest patch It - almost - works like with our own hacks of V1...

Only problem seems how to correctly setup the regmap so that it never
really tries to read the chip but return the last value that was written...

If I return false for readable_reg I get an errno = -5 for all reads.
If I return true, I get:

[   13.353654] leds-is31fl319x 4-0064: is31fl319x_brightness_set read ret=-11 [1]: 0

[   27.661668] leds-is31fl319x 4-0064: is31fl319x_brightness_set read ret=-110 [1]: 0

which means that the regmap *is* trying to read the chip instead of the cache. This
times out the bus:

[   27.641615] omap_i2c 4807c000.i2c: controller timed out

Such timeouts lead to kernel stalls if there are led triggers (system is flooded
by unprocessed write requests to the chip).

'top' revealed the highest activity process:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  824 root     -51   0       0      0      0 R  41.1  0.0   0:44.59 irq/299-4807c00 

which is indeed the i2c interrupt for the bus where the led driver is connected to.

Please can someone look over the code to spot issues?

http://git.goldelico.com/?p=gta04-kernel.git;a=blob;f=drivers/leds/leds-is31fl319x.c;h=05f89a27a568c1f9a5c55917ca72e34ce905760c;hb=0e74d2f7ab126d4a1b1a6cc2cd082b0a5fc96a5f

BR and thanks,
Nikolaus



More information about the Letux-kernel mailing list