[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