2020-06-20 22:45:19

by J. Neuschäfer

[permalink] [raw]
Subject: [RFC PATCH 00/10] Netronix embedded controller driver for Kobo and Tolino ebook readers

Hi,

This patchset adds basic support for the embedded controller found on
older ebook reader boards designed by/with the ODM Netronix Inc.[1] and
sold by Kobo or Tolino, for example the Kobo Aura and the Tolino Shine.
These drivers are based on the vendor kernel sources, but in order to
all information in a single place, I documented the register interface
of the EC on GitHub[4].

A few things still needs to be ironed out, hence the RFC tag:
- The reboot/reset handler in patch 3/10 calls into I2C code, which may
sleep, but reboot handlers are apparently not allowed to sleep.
- I'm not sure I got the YAML DT bindings right. I have also included
the plain text DT bindings for reference.


Jonathan

[1]: http://www.netronixinc.com/products.aspx?ID=1
[2]: https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller

Jonathan Neuschäfer (10):
DT bindings in plain text format
dt-bindings: Add vendor prefix for Netronix, Inc.
dt-bindings: mfd: Add binding for Netronix's embedded controller
mfd: Add base driver for Netronix embedded controller
dt-bindings: pwm: Add bindings for PWM function in Netronix EC
pwm: ntxec: Add driver for PWM function in Netronix EC
dt-bindings: rtc: Add bindings for Netronix embedded controller RTC
rtc: New driver for RTC in Netronix embedded controller
MAINTAINERS: Add entry for Netronix embedded controller
ARM: dts: imx50-kobo-aura: Add Netronix embedded controller

.../bindings/mfd/netronix,ntxec.txt | 58 ++++++
.../bindings/mfd/netronix,ntxec.yaml | 77 +++++++
.../bindings/pwm/netronix,ntxec-pwm.txt | 27 +++
.../bindings/pwm/netronix,ntxec-pwm.yaml | 33 +++
.../bindings/rtc/netronix,ntxec-rtc.txt | 17 ++
.../bindings/rtc/netronix,ntxec-rtc.yaml | 27 +++
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 11 +
arch/arm/boot/dts/imx50-kobo-aura.dts | 27 ++-
drivers/mfd/Kconfig | 7 +
drivers/mfd/Makefile | 1 +
drivers/mfd/ntxec.c | 188 ++++++++++++++++++
drivers/pwm/Kconfig | 4 +
drivers/pwm/Makefile | 1 +
drivers/pwm/pwm-ntxec.c | 148 ++++++++++++++
drivers/rtc/Kconfig | 4 +
drivers/rtc/Makefile | 1 +
drivers/rtc/rtc-ntxec.c | 115 +++++++++++
include/linux/mfd/ntxec.h | 30 +++
19 files changed, 777 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/mfd/netronix,ntxec.txt
create mode 100644 Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
create mode 100644 Documentation/devicetree/bindings/pwm/netronix,ntxec-pwm.txt
create mode 100644 Documentation/devicetree/bindings/pwm/netronix,ntxec-pwm.yaml
create mode 100644 Documentation/devicetree/bindings/rtc/netronix,ntxec-rtc.txt
create mode 100644 Documentation/devicetree/bindings/rtc/netronix,ntxec-rtc.yaml
create mode 100644 drivers/mfd/ntxec.c
create mode 100644 drivers/pwm/pwm-ntxec.c
create mode 100644 drivers/rtc/rtc-ntxec.c
create mode 100644 include/linux/mfd/ntxec.h

--
2.27.0


2020-06-30 06:45:03

by Andreas Kemnade

[permalink] [raw]
Subject: Re: [RFC PATCH 00/10] Netronix embedded controller driver for Kobo and Tolino ebook readers

Hi,

On Sun, 21 Jun 2020 00:39:04 +0200
Jonathan Neuschäfer <[email protected]> wrote:

> Hi,
>
> This patchset adds basic support for the embedded controller found on
> older ebook reader boards designed by/with the ODM Netronix Inc.[1] and
> sold by Kobo or Tolino, for example the Kobo Aura and the Tolino Shine.
> These drivers are based on the vendor kernel sources, but in order to
> all information in a single place, I documented the register interface
> of the EC on GitHub[4].
>
> A few things still needs to be ironed out, hence the RFC tag:
> - The reboot/reset handler in patch 3/10 calls into I2C code, which may
> sleep, but reboot handlers are apparently not allowed to sleep.
> - I'm not sure I got the YAML DT bindings right. I have also included
> the plain text DT bindings for reference.
>
>
got a chance to test it on a Tolino Shine 2 HD.
It uses the RTC from the RC5T619 but backlight seems to go via MSP430
EC.

I got this.

[ 1.453603] ntxec 0-0043: Netronix embedded controller version f110 detected.
[ 10.723638] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: registered as rtc0
[ 10.775276] ntxec-pwm: probe of 21a0000.i2c:embedded-controller@43:pwm failed with error -5
[ 10.850597] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: hctosys: unable to read the hardware clock

version number matchess with what the vendor kernel reports. Maybe we
should document which version is running on which devices?

&i2c1 {
pinctrl-names = "default","sleep";
pinctrl-0 = <&pinctrl_i2c1>;
pinctrl-1 = <&pinctrl_i2c1_sleep>;
status = "okay";

embedded-controller@43 {
// pinctrl-names = "default";
// pinctrl-0 = <&pinctrl_ec>;
compatible = "netronix,ntxec";
reg = <0x43>;
interrupts-extended = <&gpio5 11 IRQ_TYPE_EDGE_FALLING>;
interrupt-controller;
#interrupt-cells = <1>;

ec_pwm: pwm {
compatible = "netronix,ntxec-pwm";
#pwm-cells = <2>;
};

rtc {
compatible = "netronix,ntxec-rtc";
};
};
};

Regards,
Andreas

2020-06-30 07:17:44

by J. Neuschäfer

[permalink] [raw]
Subject: Re: [RFC PATCH 00/10] Netronix embedded controller driver for Kobo and Tolino ebook readers

On Tue, Jun 30, 2020 at 08:40:51AM +0200, Andreas Kemnade wrote:
[...]
> got a chance to test it on a Tolino Shine 2 HD.
> It uses the RTC from the RC5T619 but backlight seems to go via MSP430
> EC.
>
> I got this.
>
> [ 1.453603] ntxec 0-0043: Netronix embedded controller version f110 detected.
> [ 10.723638] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: registered as rtc0
> [ 10.775276] ntxec-pwm: probe of 21a0000.i2c:embedded-controller@43:pwm failed with error -5

Hmm, -EIO from the PWM driver.

> [ 10.850597] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: hctosys: unable to read the hardware clock
>
> version number matchess with what the vendor kernel reports. Maybe we
> should document which version is running on which devices?

Good idea, I've added a table to the wiki page:

https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller



Jonathan


Attachments:
(No filename) (932.00 B)
signature.asc (849.00 B)
Download all attachments

2020-06-30 20:57:01

by Andreas Kemnade

[permalink] [raw]
Subject: Re: [RFC PATCH 00/10] Netronix embedded controller driver for Kobo and Tolino ebook readers

On Tue, 30 Jun 2020 09:15:23 +0200
Jonathan Neuschäfer <[email protected]> wrote:

> On Tue, Jun 30, 2020 at 08:40:51AM +0200, Andreas Kemnade wrote:
> [...]
> > got a chance to test it on a Tolino Shine 2 HD.
> > It uses the RTC from the RC5T619 but backlight seems to go via MSP430
> > EC.
> >
> > I got this.
> >
> > [ 1.453603] ntxec 0-0043: Netronix embedded controller version f110 detected.
> > [ 10.723638] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: registered as rtc0
> > [ 10.775276] ntxec-pwm: probe of 21a0000.i2c:embedded-controller@43:pwm failed with error -5
>
> Hmm, -EIO from the PWM driver.
>
Weird...
IOMUXC_SW_PAD_CTL_PAD_I2C1_SDA/SCL is identical between
vendor kernel (heavily patched 3.0.35) and patched mainline.

MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x4001f8b1
MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x4001f8b1

root@tolino2:~# i2cset -f 0 0x43 0xa3 0x0001 w
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will write to device file /dev/i2c-0, chip address 0x43, data address
0xa3, data 0x01, mode word.
Continue? [Y/n]
Error: Write failed
root@tolino2:~# i2cset -f 0 0x43 0xa3 0x0000 w
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will write to device file /dev/i2c-0, chip address 0x43, data address
0xa3, data 0x00, mode word.
Continue? [Y/n]
Error: Write failed

but backlight gets toggled. Same behavior on vendor kernel and
in vendor uboot.
That smells.

Regards,
Andreas

2020-06-30 21:14:40

by Andreas Kemnade

[permalink] [raw]
Subject: Re: [RFC PATCH 00/10] Netronix embedded controller driver for Kobo and Tolino ebook readers

On Tue, 30 Jun 2020 09:15:23 +0200
Jonathan Neuschäfer <[email protected]> wrote:

> On Tue, Jun 30, 2020 at 08:40:51AM +0200, Andreas Kemnade wrote:
> [...]
> > got a chance to test it on a Tolino Shine 2 HD.
> > It uses the RTC from the RC5T619 but backlight seems to go via MSP430
> > EC.
> >
> > I got this.
> >
> > [ 1.453603] ntxec 0-0043: Netronix embedded controller version f110 detected.
> > [ 10.723638] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: registered as rtc0
> > [ 10.775276] ntxec-pwm: probe of 21a0000.i2c:embedded-controller@43:pwm failed with error -5
>
> Hmm, -EIO from the PWM driver.
>
turing debugging on:

[ 330.330599] i2c i2c-0: <i2c_imx_xfer_common>
[ 330.330621] i2c i2c-0: <i2c_imx_start>
[ 330.332927] i2c i2c-0: <i2c_imx_bus_busy>
[ 330.332953] i2c i2c-0: <i2c_imx_xfer_common> transfer message: 0
[ 330.332971] i2c i2c-0: <i2c_imx_write> write slave address: addr=0x86
[ 330.334365] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.334386] i2c i2c-0: <i2c_imx_acked> ACK received
[ 330.334402] i2c i2c-0: <i2c_imx_write> write data
[ 330.334420] i2c i2c-0: <i2c_imx_write> write byte: B0=0xA3
[ 330.334756] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.334774] i2c i2c-0: <i2c_imx_acked> ACK received
[ 330.334790] i2c i2c-0: <i2c_imx_write> write byte: B1=0x0
[ 330.351573] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.351598] i2c i2c-0: <i2c_imx_acked> No ACK
[ 330.351613] i2c i2c-0: <i2c_imx_stop>
[ 330.351629] i2c i2c-0: <i2c_imx_bus_busy>
[ 330.351648] i2c i2c-0: <i2c_imx_xfer_common> exit with: error: -6
[ 330.351690] i2c i2c-0: <i2c_imx_xfer_common>
[ 330.351704] i2c i2c-0: <i2c_imx_start>
[ 330.352297] i2c i2c-0: <i2c_imx_bus_busy>
[ 330.352321] i2c i2c-0: <i2c_imx_xfer_common> transfer message: 0
[ 330.352339] i2c i2c-0: <i2c_imx_write> write slave address: addr=0x86
[ 330.362152] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.362176] i2c i2c-0: <i2c_imx_acked> ACK received
[ 330.362191] i2c i2c-0: <i2c_imx_write> write data
[ 330.362208] i2c i2c-0: <i2c_imx_write> write byte: B0=0xA1
[ 330.362442] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.362461] i2c i2c-0: <i2c_imx_acked> ACK received
[ 330.362479] i2c i2c-0: <i2c_imx_write> write byte: B1=0xFF
[ 330.362686] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.362705] i2c i2c-0: <i2c_imx_acked> No ACK
[ 330.362720] i2c i2c-0: <i2c_imx_stop>
[ 330.362735] i2c i2c-0: <i2c_imx_bus_busy>
[ 330.362753] i2c i2c-0: <i2c_imx_xfer_common> exit with: error: -6
[ 330.362794] i2c i2c-0: <i2c_imx_xfer_common>
[ 330.362808] i2c i2c-0: <i2c_imx_start>
[ 330.363071] i2c i2c-0: <i2c_imx_bus_busy>
[ 330.363094] i2c i2c-0: <i2c_imx_xfer_common> transfer message: 0
[ 330.363112] i2c i2c-0: <i2c_imx_write> write slave address: addr=0x86
[ 330.363313] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.363331] i2c i2c-0: <i2c_imx_acked> ACK received
[ 330.363346] i2c i2c-0: <i2c_imx_write> write data
[ 330.363362] i2c i2c-0: <i2c_imx_write> write byte: B0=0xA2
[ 330.363572] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.363591] i2c i2c-0: <i2c_imx_acked> ACK received
[ 330.363608] i2c i2c-0: <i2c_imx_write> write byte: B1=0xFF
[ 330.363822] i2c i2c-0: <i2c_imx_trx_complete> TRX complete
[ 330.363841] i2c i2c-0: <i2c_imx_acked> No ACK
[ 330.363854] i2c i2c-0: <i2c_imx_stop>
[ 330.363869] i2c i2c-0: <i2c_imx_bus_busy>
[ 330.363886] i2c i2c-0: <i2c_imx_xfer_common> exit with: error: -6

Regards,
Andreas

2020-07-04 21:01:30

by J. Neuschäfer

[permalink] [raw]
Subject: Re: [RFC PATCH 00/10] Netronix embedded controller driver for Kobo and Tolino ebook readers

On Tue, Jun 30, 2020 at 10:14:47PM +0200, Andreas Kemnade wrote:
> On Tue, 30 Jun 2020 09:15:23 +0200
> Jonathan Neuschäfer <[email protected]> wrote:
>
> > On Tue, Jun 30, 2020 at 08:40:51AM +0200, Andreas Kemnade wrote:
> > [...]
> > > got a chance to test it on a Tolino Shine 2 HD.
> > > It uses the RTC from the RC5T619 but backlight seems to go via MSP430
> > > EC.
> > >
> > > I got this.
> > >
> > > [ 1.453603] ntxec 0-0043: Netronix embedded controller version f110 detected.
> > > [ 10.723638] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: registered as rtc0
> > > [ 10.775276] ntxec-pwm: probe of 21a0000.i2c:embedded-controller@43:pwm failed with error -5
> >
> > Hmm, -EIO from the PWM driver.
> >
> turing debugging on:

(edited for compactness:)
> [ 330.332971] i2c i2c-0: write slave address: addr=0x86 ACK received
> [ 330.334420] i2c i2c-0: write byte: B0=0xA3 ACK received
> [ 330.334790] i2c i2c-0: write byte: B1=0x0 No ACK

> [ 330.352339] i2c i2c-0: write slave address: addr=0x86 ACK received
> [ 330.362208] i2c i2c-0: write byte: B0=0xA1 ACK received
> [ 330.362479] i2c i2c-0: write byte: B1=0xFF No ACK

> [ 330.363112] i2c i2c-0: write slave address: addr=0x86 ACK received
> [ 330.363362] i2c i2c-0: write byte: B0=0xA2 ACK received
> [ 330.363608] i2c i2c-0: write byte: B1=0xFF No ACK

Hmm, it doesn't ack the writes to 0xA3, 0xA1 and 0xA2, which should
disable the PWM output and then disable the auto-off timer (according to
the vendor kernel).

And you said in your other mail that you can actually toggle the light
with writes to 0xA3, so I suspect a bug in the EC firmware here (which
may have gone unnoticed because the vendor kernel doesn't check if the
i2c transfers succeed). :/

IMHO we should get this driver merged first, and perhaps add a quirk to
deal with the missing ACKs later (unless a better solution is found).


Jonathan


Attachments:
(No filename) (1.99 kB)
signature.asc (849.00 B)
Download all attachments

2020-07-06 19:30:00

by Andreas Kemnade

[permalink] [raw]
Subject: Re: [RFC PATCH 00/10] Netronix embedded controller driver for Kobo and Tolino ebook readers

On Sat, 4 Jul 2020 22:58:08 +0200
Jonathan Neuschäfer <[email protected]> wrote:

> On Tue, Jun 30, 2020 at 10:14:47PM +0200, Andreas Kemnade wrote:
> > On Tue, 30 Jun 2020 09:15:23 +0200
> > Jonathan Neuschäfer <[email protected]> wrote:
> >
> > > On Tue, Jun 30, 2020 at 08:40:51AM +0200, Andreas Kemnade wrote:
> > > [...]
> > > > got a chance to test it on a Tolino Shine 2 HD.
> > > > It uses the RTC from the RC5T619 but backlight seems to go via MSP430
> > > > EC.
> > > >
> > > > I got this.
> > > >
> > > > [ 1.453603] ntxec 0-0043: Netronix embedded controller version f110 detected.
> > > > [ 10.723638] ntxec-rtc 21a0000.i2c:embedded-controller@43:rtc: registered as rtc0
> > > > [ 10.775276] ntxec-pwm: probe of 21a0000.i2c:embedded-controller@43:pwm failed with error -5
> > >
> > > Hmm, -EIO from the PWM driver.
> > >
> > turing debugging on:
>
> (edited for compactness:)
> > [ 330.332971] i2c i2c-0: write slave address: addr=0x86 ACK received
> > [ 330.334420] i2c i2c-0: write byte: B0=0xA3 ACK received
> > [ 330.334790] i2c i2c-0: write byte: B1=0x0 No ACK
>
> > [ 330.352339] i2c i2c-0: write slave address: addr=0x86 ACK received
> > [ 330.362208] i2c i2c-0: write byte: B0=0xA1 ACK received
> > [ 330.362479] i2c i2c-0: write byte: B1=0xFF No ACK
>
> > [ 330.363112] i2c i2c-0: write slave address: addr=0x86 ACK received
> > [ 330.363362] i2c i2c-0: write byte: B0=0xA2 ACK received
> > [ 330.363608] i2c i2c-0: write byte: B1=0xFF No ACK
>
> Hmm, it doesn't ack the writes to 0xA3, 0xA1 and 0xA2, which should
> disable the PWM output and then disable the auto-off timer (according to
> the vendor kernel).
>
> And you said in your other mail that you can actually toggle the light
> with writes to 0xA3, so I suspect a bug in the EC firmware here (which
> may have gone unnoticed because the vendor kernel doesn't check if the
> i2c transfers succeed). :/
>
That is a also my theory.

> IMHO we should get this driver merged first, and perhaps add a quirk to
> deal with the missing ACKs later (unless a better solution is found).
>
Yes, that can be done separately (after the Tolino Shine 2 HD dtb is
in, I am polishing it right now).

Regards,
Andreas