dts: ite: refactor the it8801 template hierarchy
The it8801 template is helpful but in the current state it does not allow changing the device address as that is in the template itself. Fix that by moving the template content down a level in the hierarchy, so that it extends the mfd device itself rather than than instantiate it, then the base instance can have any address, now the only limitation is that only one instance is possible, but that is probably alright for now. Alternatives would be to use a define for the address, or even a template per address, but this feels like a better compromise for now. This may also use https://github.com/zephyrproject-rtos/zephyr/pull/82825 in the future if that ever becomes a thing. Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
This commit is contained in:
parent
ee250a11ce
commit
b716b0672d
5 changed files with 178 additions and 229 deletions
|
|
@ -5,15 +5,9 @@ description: |
|
|||
ITE IT8801 ioexpander multi-function device drivers.
|
||||
This ioexpander provides a GPIO/PWM/Keyboard function via I2C bus.
|
||||
|
||||
An example configuration:
|
||||
An example configuration using the it8801-common-cfg.dtsi template:
|
||||
|
||||
&i2c4 {
|
||||
status = "okay";
|
||||
clock-frequency = <I2C_BITRATE_STANDARD>;
|
||||
pinctrl-0 = <&i2c4_clk_gpe0_default
|
||||
&i2c4_data_gpe7_default>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
it8801_mfd: it8801@38 {
|
||||
compatible = "ite,it8801-mfd";
|
||||
/*
|
||||
|
|
@ -23,74 +17,27 @@ description: |
|
|||
*/
|
||||
reg = <0x38>;
|
||||
irq-gpios = <&gpioa 1 0>; /* SMB_INT# */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
}
|
||||
|
||||
ioex_it8801_port0: it8801_port@0 {
|
||||
compatible = "ite,it8801-gpio";
|
||||
reg = <0x00 1 /* GPIPSR */
|
||||
0x05 1 /* GPSOVR */
|
||||
0x0a 8 /* GPCR */
|
||||
0x32 1 /* GPISR */
|
||||
0x37 1>; /* GPIER */
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
ngpios = <8>;
|
||||
pin-mask = <0xdb>;
|
||||
};
|
||||
#include <ite/it8801-common-cfg.dtsi>
|
||||
|
||||
ioex_it8801_port1: it8801_port@1 {
|
||||
compatible = "ite,it8801-gpio";
|
||||
reg = <0x01 1 /* GPIPSR */
|
||||
0x06 1 /* GPSOVR */
|
||||
0x12 8 /* GPCR */
|
||||
0x33 1 /* GPISR */
|
||||
0x38 1>; /* GPIER */
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
ngpios = <8>;
|
||||
pin-mask = <0x3f>;
|
||||
};
|
||||
/* sub-devices available at nodelabels:
|
||||
* - ioex_it8801_port0
|
||||
* - ioex_it8801_port1
|
||||
* - ioex_it8801_port2
|
||||
* - ioex_it8801_kbd
|
||||
* - ioex_it8801_pwm
|
||||
*/
|
||||
|
||||
ioex_it8801_port2: it8801_port@2 {
|
||||
compatible = "ite,it8801-gpio";
|
||||
reg = <0x02 1 /* GPIPSR */
|
||||
0x07 1 /* GPSOVR */
|
||||
0x1a 8 /* GPCR */
|
||||
0x34 1 /* GPISR */
|
||||
0x39 1>; /* GPIER */
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
ngpios = <8>;
|
||||
pin-mask = <0x0f>;
|
||||
};
|
||||
|
||||
ioex_it8801_kbd: it8801_kbd@40 {
|
||||
compatible = "ite,it8801-kbd";
|
||||
reg = <0x40 1 /* KSOMCR */
|
||||
0x41 1 /* KSIDR */
|
||||
0x42 1 /* KSIEER */
|
||||
0x43 1>; /* KSIIER */
|
||||
kso-mapping = <0 1 20 3 4 5 6
|
||||
17 18 16 15 11 12>;
|
||||
mfdctrl = <&kso18_gp01_default
|
||||
&kso20_gp23_default>;
|
||||
&ioex_it8801_kbd {
|
||||
kso-mapping = <0 1 20 3 4 5 6 17 18 16 15 11 12>;
|
||||
mfdctrl = <&kso18_gp01_default &kso20_gp23_default>;
|
||||
row-size = <8>;
|
||||
col-size = <13>;
|
||||
|
||||
kscan_input: kscan-input {
|
||||
compatible = "zephyr,kscan-input";
|
||||
};
|
||||
};
|
||||
|
||||
ioex_it8801_pwm: it8801_pwm@90 {
|
||||
compatible = "ite,it8801-pwm";
|
||||
mfdctrl = <&pwm7_gp20_default>;
|
||||
reg = <0x90 1 /* PWMMCR */
|
||||
0x94 1>; /* PWMDCR */
|
||||
channel = <7>;
|
||||
#pwm-cells = <3>;
|
||||
};
|
||||
&ioex_it8801_pwm {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,7 @@
|
|||
|
||||
#include <ite/it8801-mfd-map.dtsi>
|
||||
|
||||
&it8801_i2c {
|
||||
it8801_mfd: it8801@38 {
|
||||
compatible = "ite,it8801-mfd";
|
||||
reg = <0x38>;
|
||||
&it8801_mfd {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
|
|
@ -150,5 +147,4 @@
|
|||
channel = <9>;
|
||||
#pwm-cells = <3>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,12 +4,14 @@
|
|||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
it8801_i2c: &i2c4 {
|
||||
&i2c4 {
|
||||
status = "okay";
|
||||
|
||||
it8801_mfd: it8801@38 {
|
||||
compatible = "ite,it8801-mfd";
|
||||
reg = <0x38>;
|
||||
irq-gpios = <&gpioa 1 0>;
|
||||
};
|
||||
};
|
||||
|
||||
#include <ite/it8801-common-cfg.dtsi>
|
||||
|
||||
&it8801_mfd {
|
||||
irq-gpios = <&gpioa 1 0>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,16 +6,19 @@
|
|||
|
||||
/delete-node/ &kbd;
|
||||
|
||||
it8801_i2c: &i2c4 {
|
||||
&i2c4 {
|
||||
status = "okay";
|
||||
|
||||
it8801_mfd: it8801@38 {
|
||||
compatible = "ite,it8801-mfd";
|
||||
reg = <0x38>;
|
||||
irq-gpios = <&gpioa 1 0>;
|
||||
};
|
||||
};
|
||||
|
||||
#include <ite/it8801-common-cfg.dtsi>
|
||||
|
||||
&it8801_mfd {
|
||||
irq-gpios = <&gpioa 1 0>;
|
||||
|
||||
ioex_it8801_kbd: it8801_kbd@40 {
|
||||
&ioex_it8801_kbd {
|
||||
status = "okay";
|
||||
/* GP00, GP01, GP21, GP22, GP23 can be configured as alternate KSO pins */
|
||||
mfdctrl = <&kso18_gp01_default &kso20_gp23_default>;
|
||||
|
|
@ -26,5 +29,4 @@ it8801_i2c: &i2c4 {
|
|||
kscan_input: kscan-input {
|
||||
compatible = "zephyr,kscan-input";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -10,16 +10,18 @@
|
|||
};
|
||||
};
|
||||
|
||||
it8801_i2c: &i2c4 {
|
||||
&i2c4 {
|
||||
status = "okay";
|
||||
|
||||
it8801_mfd: it8801@38 {
|
||||
compatible = "ite,it8801-mfd";
|
||||
reg = <0x38>;
|
||||
irq-gpios = <&gpioa 1 0>;
|
||||
};
|
||||
};
|
||||
|
||||
#include <ite/it8801-common-cfg.dtsi>
|
||||
|
||||
&it8801_mfd {
|
||||
irq-gpios = <&gpioa 1 0>;
|
||||
|
||||
ioex_it8801_pwm7: it8801_pwm@90 {
|
||||
&ioex_it8801_pwm7 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue