[Letux-kernel] letux-4.7-rc7: charging & ethernet gadget

H. Nikolaus Schaller hns at goldelico.com
Wed Jul 20 22:53:06 CEST 2016


> Am 20.07.2016 um 20:07 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
> 
> 
>> Am 20.07.2016 um 12:08 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>> 
>> 
>>> Am 20.07.2016 um 11:17 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>>> 
>>> Hi Andreas,
>>> 
>>>> 
>>>>> [   60.034973] twl4030 REG_BCICTL1 = 12
>>>>> [   60.046569] twl4030 REG_BCICTL2 = 00
>>>>> [   60.061920] twl4030 current = 10 uA
>>>>> [   60.074676] twl4030 res = 0 Ohm
>>>>> [   60.089141] twl4030 temp = 59 C
>>>>> temp: 56°C
>>>> 
>>>> This means ITHEN is disabled after boot! For whatever reasons. 
>>> 
>>> I can't even set the ITHEN bit!
>>> 
>>> [  279.510040] twl4030_madc_set_current_generator read regval = 12
>>> [  279.517547] twl4030_madc_set_current_generator write regval = 1a
>>> [  279.527343] twl4030_madc_set_current_generator read back regval = 12
> 
> it is not lost in software but by hardware:
> 
> [   67.609069] twl_i2c_read 2 23->97[1] -> 12...
> [   67.613647] twl4030_madc_set_current_generator read regval = 12
> [   67.620941] twl4030_madc_set_current_generator write regval = 1a
> [   67.628112] twl_i2c_write 2 23->97[1] -> 1a...
> [   67.637786] twl_i2c_read 2 23->97[1] -> 12...
> [   67.637817] twl4030_madc_set_current_generator read back regval = 12

I have now looked through the full boot log and ~13.30 seconds
the register value is 0x1b. For ca. 30ms. Then it goes back to 0x12.

Here an interesting sequence:

[   13.296447] musb-hdrc musb-hdrc.0.auto: power state already 0
[   13.296478] twl4030_bci 48070000.i2c:twl at 48:bci: OTG notify 1
[   13.296478] twl4030_bci 48070000.i2c:twl at 48:bci: OTG notify USB_EVENT_VBUS

^^^ twl4030_bci_usb_work() prints this message

vvv this must be twl4030_charger_enable_usb()

[   13.296508] twl_i2c_write 14 0a->0a[2] -> 00...
[   13.296661] twl_i2c_write 14 13->13[1] -> 20...
[   13.296966] twl_i2c_read 14 13->13[1] -> de...

^^^ oops. Another unwriteable register?

seems to belong to madc (14 = TWL4030_BASEADD_MADC).
See: http://lxr.free-electrons.com/source/drivers/mfd/twl-core.c#L174

[   13.297180] twl_i2c_read 14 4d->4d[2] -> 40...

vvv this is ac_available()

[   13.297180] twl4030_madc_conversion ret=1
[   13.297180] twl4030_madc_read chan=11 val=9
[   13.297210] twl4030_bci vac 9
[   13.297210] twl4030_bci 48070000.i2c:twl at 48:bci: cgain 0
[   13.297454] twl_i2c_read 2 23->97[1] -> 12...

^^^ still 0x12

[   13.297851] twl_i2c_read 3 07->3d[1] -> 35...
[   13.298004] twl_i2c_read 9 05->05[1] -> 80...
[   13.298095] twl_i2c_read 2 1d->91[1] -> 59...
[   13.298370] twl_i2c_read 2 1e->92[1] -> 9f...
[   13.298370] twl4030_bci 48070000.i2c:twl at 48:bci: cur 500000 reg 812
[   13.298583] twl_i2c_read 2 27->9b[1] -> 00...
[   13.298828] twl_i2c_read 2 28->9c[1] -> 02...
[   13.298828] twl_i2c_write 2 11->85[1] -> e7...
[   13.299011] twl_i2c_write 2 28->9c[1] -> 03...
[   13.299194] twl_i2c_write 2 11->85[1] -> e7...
[   13.299377] twl_i2c_write 2 27->9b[1] -> 2c...
[   13.299743] twl_i2c_read 3 07->3d[1] -> 35...
[   13.299743] twl_i2c_write 3 07->3d[1] -> 37...
[   13.300170] twl_i2c_read 2 10->84[1] -> f0...
[   13.300170] twl_i2c_write 2 10->84[1] -> f4...
[   13.300567] twl_i2c_read 9 05->05[1] -> 80...
[   13.300933] twl_i2c_read 1 01->81[1] -> 04...

vvv here an interrupt occurs and both interrupt status registers are read

[   13.301116] twl_i2c_read 15 00->b9[1] -> 08...
[   13.301300] twl_i2c_read 15 01->ba[1] -> 00...
[   13.301330] twl4030_bci 48070000.i2c:twl at 48:bci: BCI irq 00 08

vvv seems to be twl4030_charger_update_current()

[   13.301391] twl_i2c_write 14 0a->0a[2] -> 00...
[   13.301544] twl_i2c_write 14 13->13[1] -> 20...
[   13.301879] twl_i2c_read 14 13->13[1] -> de...

^^^ oops again!

[   13.302062] twl_i2c_read 14 4d->4d[2] -> 00...

vvv this is ac_available()

[   13.302062] twl4030_madc_conversion ret=1
[   13.302093] twl4030_madc_read chan=11 val=0
[   13.302093] twl4030_bci vac 0
[   13.302093] twl4030_bci 48070000.i2c:twl at 48:bci: cgain 0
[   13.302246] twl4030_bci 48070000.i2c:twl at 48:bci: get_property: 4
[   13.302398] twl_i2c_read 2 23->97[1] -> 1b...

^^^ now 0x1b - some of the previous i2c_write must have enabled

[   13.302581] twl_i2c_read 3 07->3d[1] -> 37...
[   13.302886] twl_i2c_read 2 1d->91[1] -> 59...
[   13.303009] twl4030_bci 48070000.i2c:twl at 48:bci: get_property: 4
[   13.303100] twl_i2c_read 2 1e->92[1] -> 9f...
[   13.303131] twl4030_bci 48070000.i2c:twl at 48:bci: cur 500000 reg 812

...

shortly after than I get 

[   13.334228] twl4030_bci 48070000.i2c:twl at 48:bci: BCI irq 00 08
[   13.334289] twl_i2c_write 14 0a->0a[2] -> 00...
[   13.334472] twl_i2c_write 14 13->13[1] -> 20...
[   13.334808] twl_i2c_read 14 13->13[1] -> de...

vvv this differs a little - but I don't know if it is relevant

[   13.334991] twl_i2c_read 14 4d->4d[2] -> 40...

vvv this is ac_available()

[   13.335021] twl4030_madc_conversion ret=1
[   13.335021] twl4030_madc_read chan=11 val=9
[   13.335021] twl4030_bci vac 9
[   13.335052] twl4030_bci 48070000.i2c:twl at 48:bci: cgain 0
[   13.335266] twl_i2c_read 2 23->97[1] -> 12...

^^^ now 0x12 - something has disabled ITHEN in between

Looks as if I should trace twl4030_charger_enable_usb()
twl4030_charger_update_current() and friends. Tomorrow...

BR,
Nikolaus



More information about the Letux-kernel mailing list