diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts index 0707d50e38be..b73540e3b408 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts @@ -921,8 +921,9 @@ &i2c0 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c0_dv_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c0_dv_pins>; + pinctrl-1 = <&i2c0_dv_pins_slp_input>; }; &audiobus { @@ -1296,8 +1297,9 @@ &i2c2 { status = "okay"; - pinctrl-names="default"; - pinctrl-0=<&i2c2_z_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_z_pins>; + pinctrl-1 = <&i2c2_z_pins_slp_input>; clock-frequency = <400000>; tas5805: tas5805@36 { @@ -1482,6 +1484,31 @@ &pwm_ab { status = "okay"; + clock-frequency = <300000>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_h_pins>; + pinctrl-1 = <&i2c1_h_pins_slp_input>; + + lcd_extern_i2c0: lcd_extern_i2c@0 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_T5800Q"; + reg = <0x1c>; + status = "okay"; + }; + + lcd_extern_i2c1: lcd_extern_i2c@1 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_ANX6862"; + reg = <0x20>; + status = "okay"; + }; + + lcd_extern_i2c2: lcd_extern_i2c@2 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_ANX7911"; + reg = <0x74>; + status = "okay"; + }; }; &efuse { diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts index 8747e2a5e010..7f6f13003e45 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts @@ -1237,8 +1237,9 @@ &i2c0 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c0_dv_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c0_dv_pins>; + pinctrl-1 = <&i2c0_dv_pins_slp_input>; }; &audiobus { @@ -1589,8 +1590,9 @@ &i2c2 { status = "okay"; - pinctrl-names="default"; - pinctrl-0=<&i2c2_z_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_z_pins>; + pinctrl-1 = <&i2c2_z_pins_slp_input>; clock-frequency = <400000>; ad82584f: ad82584f@62 { @@ -1758,8 +1760,9 @@ &i2c1 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c1_h_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_h_pins>; + pinctrl-1 = <&i2c1_h_pins_slp_input>; lcd_extern_i2c0: lcd_extern_i2c@0 { compatible = "lcd_ext, i2c"; diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts index efb0b131a7be..c639af3fd9cc 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts @@ -925,8 +925,9 @@ &i2c0 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c0_dv_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c0_dv_pins>; + pinctrl-1 = <&i2c0_dv_pins_slp_input>; }; &audiobus { @@ -1277,8 +1278,9 @@ &i2c2 { status = "okay"; - pinctrl-names="default"; - pinctrl-0=<&i2c2_z_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_z_pins>; + pinctrl-1 = <&i2c2_z_pins_slp_input>; clock-frequency = <400000>; tas5805: tas5805@36 { @@ -1478,6 +1480,35 @@ status = "okay"; }; +&i2c1 { + status = "okay"; + clock-frequency = <300000>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_h_pins>; + pinctrl-1 = <&i2c1_h_pins_slp_input>; + + lcd_extern_i2c0: lcd_extern_i2c@0 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_T5800Q"; + reg = <0x1c>; + status = "okay"; + }; + + lcd_extern_i2c1: lcd_extern_i2c@1 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_ANX6862"; + reg = <0x20>; + status = "okay"; + }; + + lcd_extern_i2c2: lcd_extern_i2c@2 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_ANX7911"; + reg = <0x74>; + status = "okay"; + }; +}; + &pwm_ab { status = "okay"; }; diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts index a0d603ef85d8..9f27260ed76f 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts @@ -1506,8 +1506,9 @@ &i2c0 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c0_dv_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c0_dv_pins>; + pinctrl-1 = <&i2c0_dv_pins_slp_input>; }; &audiobus { @@ -1893,8 +1894,9 @@ &i2c2 { status = "okay"; - pinctrl-names="default"; - pinctrl-0=<&i2c2_z_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_z_pins>; + pinctrl-1 = <&i2c2_z_pins_slp_input>; clock-frequency = <400000>; tas5805: tas5805@36 { @@ -2070,8 +2072,9 @@ &i2c1 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c1_h_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_h_pins>; + pinctrl-1 = <&i2c1_h_pins_slp_input>; lcd_extern_i2c0: lcd_extern_i2c@0 { compatible = "lcd_ext, i2c"; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts index 09e82ba38643..492598d5957a 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts @@ -1880,4 +1880,31 @@ &dvfs800_cfg &dvfs800_cfg>; }; +&i2c1 { + status = "okay"; + clock-frequency = <300000>; + pinctrl-names="default"; + pinctrl-0=<&i2c1_h_pins>; + + lcd_extern_i2c0: lcd_extern_i2c@0 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_T5800Q"; + reg = <0x1c>; + status = "okay"; + }; + + lcd_extern_i2c1: lcd_extern_i2c@1 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_ANX6862"; + reg = <0x20>; + status = "okay"; + }; + + lcd_extern_i2c2: lcd_extern_i2c@2 { + compatible = "lcd_ext, i2c"; + dev_name = "i2c_ANX7911"; + reg = <0x74>; + status = "okay"; + }; +}; diff --git a/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts b/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts index 31fd0afcc3d0..f754a3073b8d 100644 --- a/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts +++ b/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts @@ -1428,8 +1428,9 @@ &i2c0 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c0_dv_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c0_dv_pins>; + pinctrl-1 = <&i2c0_dv_pins_slp_input>; }; &audiobus { @@ -1781,8 +1782,9 @@ &i2c2 { status = "okay"; - pinctrl-names="default"; - pinctrl-0=<&i2c2_z_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_z_pins>; + pinctrl-1 = <&i2c2_z_pins_slp_input>; clock-frequency = <400000>; tas5805: tas5805@36 { @@ -1959,27 +1961,28 @@ &i2c1 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c1_h_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_h_pins>; + pinctrl-1 = <&i2c1_h_pins_slp_input>; lcd_extern_i2c0: lcd_extern_i2c@0 { compatible = "lcd_ext, i2c"; dev_name = "i2c_T5800Q"; - reg = <0x0 0x1c>; + reg = <0x1c>; status = "okay"; }; lcd_extern_i2c1: lcd_extern_i2c@1 { compatible = "lcd_ext, i2c"; dev_name = "i2c_ANX6862"; - reg = <0x0 0x20>; + reg = <0x20>; status = "okay"; }; lcd_extern_i2c2: lcd_extern_i2c@2 { compatible = "lcd_ext, i2c"; dev_name = "i2c_ANX7911"; - reg = <0x0 0x74>; + reg = <0x74>; status = "okay"; }; }; diff --git a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts index 72ec3751e5b3..30d8a299f5c2 100644 --- a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts +++ b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts @@ -1313,8 +1313,9 @@ &i2c0 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c0_dv_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c0_dv_pins>; + pinctrl-1 = <&i2c0_dv_pins_slp_input>; }; &audiobus { @@ -1665,8 +1666,9 @@ &i2c2 { status = "okay"; - pinctrl-names="default"; - pinctrl-0=<&i2c2_z_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_z_pins>; + pinctrl-1 = <&i2c2_z_pins_slp_input>; clock-frequency = <400000>; tas5805: tas5805@36 { @@ -1842,8 +1844,9 @@ &i2c1 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c1_h_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_h_pins>; + pinctrl-1 = <&i2c1_h_pins_slp_input>; lcd_extern_i2c0: lcd_extern_i2c@0 { compatible = "lcd_ext, i2c"; diff --git a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_2g.dts b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_2g.dts index b0c41429a6c9..c84f3d484537 100644 --- a/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_2g.dts +++ b/arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_2g.dts @@ -1307,8 +1307,9 @@ &i2c0 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c0_dv_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c0_dv_pins>; + pinctrl-1 = <&i2c0_dv_pins_slp_input>; }; &audiobus { @@ -1660,8 +1661,9 @@ &i2c2 { status = "okay"; - pinctrl-names="default"; - pinctrl-0=<&i2c2_z_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_z_pins>; + pinctrl-1 = <&i2c2_z_pins_slp_input>; clock-frequency = <400000>; tas5805: tas5805@36 { @@ -1837,8 +1839,9 @@ &i2c1 { status = "okay"; clock-frequency = <300000>; - pinctrl-names="default"; - pinctrl-0=<&i2c1_h_pins>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_h_pins>; + pinctrl-1 = <&i2c1_h_pins_slp_input>; lcd_extern_i2c0: lcd_extern_i2c@0 { compatible = "lcd_ext, i2c"; diff --git a/drivers/amlogic/i2c/i2c-meson-master.c b/drivers/amlogic/i2c/i2c-meson-master.c index 8bd7d4797ed5..f91bfcf8d93d 100644 --- a/drivers/amlogic/i2c/i2c-meson-master.c +++ b/drivers/amlogic/i2c/i2c-meson-master.c @@ -667,6 +667,24 @@ static int meson_i2c_remove(struct platform_device *pdev) return 0; } +static int __maybe_unused meson_i2c_resume(struct device *dev) +{ + pinctrl_pm_select_default_state(dev); + + return 0; +} + +static int __maybe_unused meson_i2c_suspend(struct device *dev) +{ + pinctrl_pm_select_sleep_state(dev); + + return 0; +} + +static const struct dev_pm_ops meson_i2c_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(meson_i2c_suspend, meson_i2c_resume) +}; + static const struct meson_i2c_data i2c_meson6_data = { .div_factor = 4, .delay_ajust = 15, @@ -727,6 +745,7 @@ static struct platform_driver meson_i2c_driver = { .remove = meson_i2c_remove, .driver = { .name = "meson-i2c", + .pm = &meson_i2c_pm_ops, .of_match_table = meson_i2c_match, }, };