[LEDE-DEV] [PATCH 2/3] ramips-mt7621: add GPIO-config for Ubiquiti-EdgeRouterX(-SFP)
Gagan Sidhu
broly at mac.com
Fri Mar 23 18:00:33 PDT 2018
update 2:
i pretty much ripped the entire drivers/i2c directory from MTK_APSoC_SDK 5310 and put it in my 4.14 (lol).
after a few small modifications, i still get the same problem.
thus, i think we can rule out kernel changes and that only leaves the bootloader (??) and the me (y’know, “it’s not the machine, it’s the person behind it” and all).
i do see that to compile u-boot, there is an rtc folder. makes me curious as to whether the RALINK devs looked at this for this specific board (882/878).
will do some more investigation when i get some more ideas.
thanks again to andrey for his amasing (lol) guidance.
> On Mar 23, 2018, at 3:51 PM, Gagan Sidhu <broly at mac.com> wrote:
>
> update:
>
> it seems the pins are supposed to be 11 and 4, and not 3 and 4:
>
>> i2c-gpio 1e000000.palmbus:i2c-gpio at 900: using pins 11 (SDA) and 4 (SCL)
>
> this results in the registration of the rtc driver, however the same problem is still there:
>
>> root at DD-WRT:~# hwclock --verbose --systohc
>> hwclock from util-linux 2.32
>> System Time: 70.107290
>> Trying to open: /dev/rtc0
>> Using the rtc interface to the clock.
>> Assuming hardware clock is kept in UTC time.
>> 70.500018 is close enough to 70.500000 (0.000018 < 0.001000)
>> Set RTC to 70 (70 + 0; refsystime = 70.000000)
>> Setting Hardware Clock to 00:01:10 = 70 seconds since 1969
>> ioctl(RTC_SET_TIME) was successful.
>> Not adjusting drift factor because the --update-drift option was not used.
>> New /etc/adjtime data:
>> 0.000000 70 0.000000
>> 70
>> UTC
>
>> root at DD-WRT:~# hwclock --verbose --hctosys
>> hwclock from util-linux 2.32
>> System Time: 73.917335
>> Trying to open: /dev/rtc0
>> Using the rtc interface to the clock.
>> Last drift adjustment done at 70 seconds after 1969
>> Last calibration done at 70 seconds after 1969
>> Hardware clock is on UTC time
>> Assuming hardware clock is kept in UTC time.
>> Waiting for clock tick...
>> ioctl(3, RTC_UIE_ON, 0): Invalid argument
>> Waiting in loop for time from /dev/rtc0 to change
>> hwclock: ioctl(RTC_RD_TIME) to /dev/rtc0 to read the time failed: Invalid argument
>> ...synchronization failed
>
>
> as andrey alluded to, i think there is something up with the changes between 3.x and 4.x that is hindering the usage of i2c devices.
>
> i am happy that i can confirm the SDA/SDL approach does not change anything in comparison to the (canonical) OF dts.
>
> i’ll forward this correspondence to Alexandre to see if he has any additional insights.
>
> these are the combinations i tried for SDA/SDL:
> 3/4 (failure)
> 4/11 (same as OF I2C approach, no RTC_RD_TIME)
> 4/5 (same as the above).
>
>
> thx
>
>
>
>> On Mar 23, 2018, at 3:16 PM, Gagan Sidhu <broly at mac.com> wrote:
>>
>>
>>> On Mar 23, 2018, at 2:20 PM, Andrey Melnikov <temnota.am at gmail.com> wrote:
>>>
>>> 2018-03-23 22:05 GMT+03:00 Gagan Sidhu <broly at mac.com>:
>>>> so there are two cases.
>>>>
>>>> 1. the case of the i2c-mt7621 driver, i do exactly what you state:
>>>> -remove “i2c” from pinctrl in the dts, and set CONFIG_I2C_MT7621=y
>>>> -in this case, the driver is half-working, but is unable to read the rtc.
>>>
>>> I2C speed checked?
>> yeah, it always shows:
>> i2c-mt7621 1e000900.i2c: clock 100KHz, re-start not support
>> during boot
>>>
>>>> 2. the case of the i2c-gpio driver. i:
>>>> -enable CONFIG_I2C_GPIO=y,
>>>> -include i2c-gpio inside the palmbus at 1E000000 { … node
>>>> -rename “i2c-mt7621” in mt7621.dtsi to “i2c-gpio”
>>>
>>> Hmm. Try build & load i2c-gpio-custom with args bus0=0,SDA-PIN,SCL-PIN
>>> and check.
>>
>> thank you for this suggestion.
>> just want to add that i forgot to add a “@900” at the end of “i2c-gpio” (so that the address is correct).
>>
>> i downloaded https://github.com/lede-project/source/tree/master/package/kernel/i2c-gpio-custom/src
>> after doing this, there is more hope but still nothing concrete.
>>
>> i first tried i2c-gpio-custom (i understand there are arguments required, so please bear with me) as a kernel driver and this is what i get:
>>
>> i2c-gpio 1e000000.palmbus:i2c-gpio at 900: using pins 3 (SDA) and 4 (SCL)
>> Custom GPIO-based I2C driver version 0.1.1
>> i2c-gpio-custom: no bus parameter(s) specified
>>
>> which results in failure to register the rtc, but at least it tries:
>>
>> rtc-pcf8563 0-0051: pcf8563_write_block_data: err=-6 addr=0e, data=03
>> rtc-pcf8563 0-0051: pcf8563_probe: write error
>> rtc-pcf8563: probe of 0-0051 failed with error -5
>>
>> now, as a module, assuming i replace SDA-PIN and SCL-PIN with 3 and 4 (values from gpios in i2c-gpio node) i get:
>>
>> root at DD-WRT:~# insmod i2c-gpio-custom.ko bus0=0,3,4
>> Jan 1 01:01:19 DD-WRT kernel: Custom GPIO-based I2C driver version 0.1.1
>> Jan 1 01:01:19 DD-WRT kernel: i2c-gpio: probe of i2c-gpio.0 failed with error -16
>>
>> root at DD-WRT:~# insmod i2c-gpio-custom.ko bus0=1,3,4
>> Jan 1 01:03:02 DD-WRT kernel: Custom GPIO-based I2C driver version 0.1.1
>> Jan 1 01:03:02 DD-WRT kernel: i2c-gpio: probe of i2c-gpio.1 failed with error -16
>>
>> aghhhhh!! so close ah.
>> need the rtc ah for pam_lastlog ah
>> greatly amplifies desktop experience on router ah
>> must have ah (lol)
>>
>>>
>>>> i followed your suggestion and removed i2c from pinctrl in the dts, but the i2c-gpio driver goes undetected.
>>>>
>>>> does anyone running lede/openwrt on an mt7621 have a functional rtc?
>>> I'm running it on mikrotik rb750gr3 without any I2C. But I have other
>>> device on mt7620 with I2C and have same problem - can't see specific
>>> controller on I2C bus. Original firmware (based on ralink SDK kernel
>>> 3.10.14-x) working. But I have not time to deep check this now.
>> no worries. i was wondering if it was something effecting all RALINK devices. it must be.
>> i don’t think the driver is the problem, but something to do with the changes in 3.x and 4.x for i2c.
>>
>>>
>>>>> On Mar 23, 2018, at 3:36 AM, Andrey Jr. Melnikov <temnota.am at gmail.com> wrote:
>>>>>
>>>>> In article <3C43C01B-94A6-4A6F-82B6-A81659508396 at mac.com> you wrote:
>>>>>> hi guys,
>>>>>
>>>>>> sorry for bumping this thread, but i found Sven???s approach interesting.
>>>>>
>>>>>> in 4.x, it does not seem i can simply enable CONFIG_I2C_GPIO=y, add the i2c-gpio node:
>>>>>
>>>>>>> i2c-gpio {
>>>>>>> compatible = "i2c-gpio";
>>>>>>> gpios = <&gpio0 3 0
>>>>>>> &gpio0 4 0>;
>>>>>>> #address-cells=<1>;
>>>>>>> #size-cells = <0>;
>>>>>>> hwmon at 4b {
>>>>>>> compatible = "national, lm92";
>>>>>>> reg = <0x4b>;
>>>>>>>
>>>>>>> };
>>>>>>>
>>>>>>> rtc at 51 {
>>>>>>> compatible = "nxp,pcf8563";
>>>>>>> reg = <0x51>;
>>>>>>> #clock-cells = <0>;
>>>>>>> };
>>>>>>>
>>>>>>>
>>>>>>> };
>>>>>
>>>>>
>>>>>> and modify the pinctrl node accordingly:
>>>>>
>>>>>>> pinctrl {
>>>>>>> state_default: pinctrl0 {
>>>>>>> gpio {
>>>>>>> ralink,group = "rgmii2", "uart2","uart3","wdt","i2c","jtag";
>>>>>>> ralink,function = "gpio";
>>>>>>> };
>>>>>>> };
>>>>>>> };
>>>>>
>>>>> adding "i2c" to gpio group simply make it unusable for kernel - it's export all named pins as plain gpio. If you want
>>>>> to use i2c kernel driver - remove "i2c" from gpio export.
>>>>>
>>>>>> in DIR882.dts (inherits from mt7621.dtsi), where i add ???i2c-gpio??? to the i2c entry in mt7621.dtsi as follows:
>>>>>
>>>>>>> i2c: i2c at 900 {
>>>>>>> compatible = "i2c-gpio";
>>>>>>> reg = <0x900 0x100>;
>>>>>>>
>>>>>>> clocks = <&sysclock>;
>>>>>>>
>>>>>>> resets = <&rstctrl 16>;
>>>>>>> reset-names = "i2c";
>>>>>>>
>>>>>>> #address-cells = <1>;
>>>>>>> #size-cells = <0>;
>>>>>>>
>>>>>>> status = "disabled";
>>>>>>>
>>>>>>> pinctrl-names = "default";
>>>>>>> pinctrl-0 = <&i2c_pins>;
>>>>>>> }
>>>>>
>>>>>> it does not work at all.
>>>>>
>>>>>> i really want a functional rtc lol.
>>>>>
>>>>>> my router is not connected to the internet so if the rtc can hold the time for a second after reset, that should be enough since resetting doesn???t cut power.
>>>>>
>>>>>> i spoke with Alexandre Belloni who has done a lot of work on the linux rtc, and he says we are missing the SDA/SDL PULLUP mechanism. this makes sense.
>>>>>
>>>>>> the question is: what needs work in order to have a fully functional rtc? as-is, i am only able to write to the clock but not able to read from it, which suggests i need to incorporate the SDA/SDL pins somehow.
>>>>>
>>>>>> any tips would be great.
>>>>>
>>>>
>>
>
More information about the Lede-dev
mailing list