diff --git a/arch/arm/boot/dts/amlogic/meson8b.dtsi b/arch/arm/boot/dts/amlogic/meson8b.dtsi index 23d0ba92068f..9d0a580cde64 100644 --- a/arch/arm/boot/dts/amlogic/meson8b.dtsi +++ b/arch/arm/boot/dts/amlogic/meson8b.dtsi @@ -58,6 +58,82 @@ }; }; + i2c_ao: i2c@c8100500{ /*I2C-AO*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-AO"; + status = "disabled"; + reg = <0xc8100500 0x1d>; + device_id = <0>; + pinctrl-names="default"; + pinctrl-0=<&ao_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <100000>; + clocks = <&clkc CLKID_CLK81>; + clock-names = "clk_i2c"; + }; + i2c_a: i2c@c1108500{ /*I2C-A*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-A"; + status = "disabled"; + reg = <0xc1108500 0x20>; + device_id = <1>; + pinctrl-names="default"; + pinctrl-0=<&a_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clkc CLKID_CLK81>; + clock-names = "clk_i2c"; + }; + i2c_b: i2c@c11087c0{ /*I2C-B*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-B"; + status = "disabled"; + reg = <0xc11087c0 0x20>; + device_id = <2>; + pinctrl-names="default"; + pinctrl-0=<&b_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clkc CLKID_CLK81>; + clock-names = "clk_i2c"; + }; + i2c_c: i2c@c11087e0{ /*I2C-C*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-C"; + status = "disabled"; + reg = <0xc11087e0 0x20>; + device_id = <3>; + pinctrl-names="default"; + pinctrl-0=<&c_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clkc CLKID_CLK81>; + clock-names = "clk_i2c"; + }; + i2c_d: i2c@c1108d20{ /*I2C-D*/ + compatible = "amlogic, meson-i2c"; + dev_name = "i2c-D"; + status = "disabled"; + reg = <0xc1108d20 0x20>; + device_id = <4>; + pinctrl-names="default"; + pinctrl-0=<&d_i2c_master>; + #address-cells = <1>; + #size-cells = <0>; + use_pio = <0>; + master_i2c_speed = <300000>; + clocks = <&clkc CLKID_CLK81>; + clock-names = "clk_i2c"; + }; + soc { compatible = "simple-bus"; #address-cells = <1>; @@ -215,6 +291,55 @@ #interrupt-cells = <2>; }; + a_i2c_master:a_i2c { + mux { + groups = "i2c_sda_a","i2c_sck_a"; + function = "i2c_a"; + }; + }; + + b_i2c_master:b_i2c { + mux { + groups = "i2c_sda_b0","i2c_sck_b0"; + function = "i2c_b"; + }; + }; + + b_i2c_master_pin1:b_i2c_pin1 { + mux { + groups = "i2c_sda_b1","i2c_sck_b1"; + function = "i2c_b"; + }; + }; + + c_i2c_master:c_i2c { + mux { + groups = "i2c_sda_c0","i2c_sck_c0"; + function = "i2c_c"; + }; + }; + + c_i2c_master_pin1:c_i2c_pin1{ + mux { + groups = "i2c_sda_c1","i2c_sck_c1"; + function = "i2c_c"; + }; + }; + + d_i2c_master:d_i2c { + mux { + groups = "i2c_sda_d0","i2c_sck_d0"; + function = "i2c_d"; + }; + }; + + d_i2c_master_pin1:d_i2c_pin1 { + mux { + groups = "i2c_sda_d1","i2c_sck_d1"; + function = "i2c_d"; + }; + }; + emmc_clk_cmd_pins:emmc_clk_cmd_pins { mux { groups = "sd_cmd_c", @@ -394,6 +519,13 @@ function = "uart_ao"; }; }; + ao_i2c_master:ao_i2c{ + mux { + groups = "i2c_mst_sck_ao", + "i2c_mst_sda_ao"; + function = "i2c_mst_ao"; + }; + }; }; dwc2_b { compatible = "amlogic,dwc2"; diff --git a/arch/arm/boot/dts/amlogic/meson8b_m200.dts b/arch/arm/boot/dts/amlogic/meson8b_m200.dts old mode 100755 new mode 100644 index 0e604a6a2b53..d7337f6ffca4 --- a/arch/arm/boot/dts/amlogic/meson8b_m200.dts +++ b/arch/arm/boot/dts/amlogic/meson8b_m200.dts @@ -190,3 +190,10 @@ pinctrl-0 = <&uart_ao_a_pins>; pinctrl-names = "default"; }; +&i2c_a { + status = "ok"; +}; +&i2c_ao { + status = "ok"; +}; + diff --git a/arch/arm/configs/meson32_defconfig b/arch/arm/configs/meson32_defconfig index 3fc5e00cd1be..3bdfcd9e33d5 100644 --- a/arch/arm/configs/meson32_defconfig +++ b/arch/arm/configs/meson32_defconfig @@ -50,6 +50,8 @@ CONFIG_AMLOGIC_USB_HOST_ELECT_TEST=y CONFIG_AMLOGIC_USBPHY=y CONFIG_AMLOGIC_CPU_VERSION=y CONFIG_AMLOGIC_M8B_MESON32_VERSION=y +CONFIG_AMLOGIC_I2C=y +CONFIG_AMLOGIC_I2C_MASTER=y CONFIG_AMLOGIC_REG_ACCESS=y CONFIG_AMLOGIC_CLK=y # CONFIG_AMLOGIC_RESET is not set diff --git a/drivers/amlogic/i2c/aml_master.c b/drivers/amlogic/i2c/aml_master.c index e90e36f6667b..53dfb0f6af82 100644 --- a/drivers/amlogic/i2c/aml_master.c +++ b/drivers/amlogic/i2c/aml_master.c @@ -1161,7 +1161,7 @@ static void __exit aml_i2c_exit(void) platform_driver_unregister(&aml_i2c_driver); } -arch_initcall(aml_i2c_init); +subsys_initcall(aml_i2c_init); module_exit(aml_i2c_exit); MODULE_AUTHOR("AMLOGIC"); diff --git a/drivers/amlogic/pinctrl/pinctrl-meson8b.c b/drivers/amlogic/pinctrl/pinctrl-meson8b.c index 2949269cfeea..d0e74e4dad4b 100644 --- a/drivers/amlogic/pinctrl/pinctrl-meson8b.c +++ b/drivers/amlogic/pinctrl/pinctrl-meson8b.c @@ -683,8 +683,12 @@ static const char * const iso7816_groups[] = { "iso7816_1_clk", "iso7816_1_data", "iso7816_2_clk", "iso7816_2_data" }; -static const char * const i2c_d_groups[] = { - "i2c_sda_d0", "i2c_sck_d0", "i2c_sda_d1", "i2c_sck_d1" +static const char * const i2c_d0_groups[] = { + "i2c_sda_d0", "i2c_sck_d0" +}; + +static const char * const i2c_d1_groups[] = { + "i2c_sda_d1", "i2c_sck_d1" }; static const char * const xtal_groups[] = { @@ -695,10 +699,15 @@ static const char * const uart_c_groups[] = { "uart_tx_c", "uart_rx_c", "uart_cts_c", "uart_rts_c" }; -static const char * const i2c_c_groups[] = { - "i2c_sda_c0", "i2c_sck_c0", "i2c_sda_c1", "i2c_sck_c1" +static const char * const i2c_c0_groups[] = { + "i2c_sda_c0", "i2c_sck_c0" }; +static const char * const i2c_c1_groups[] = { + "i2c_sda_c1", "i2c_sck_c1" +}; + + static const char * const hdmi_groups[] = { "hdmi_hpd", "hdmi_sda", "hdmi_scl", "hdmi_cec_0" }; @@ -724,8 +733,12 @@ static const char * const i2c_a_groups[] = { "i2c_sda_a", "i2c_sck_a", }; -static const char * const i2c_b_groups[] = { - "i2c_sda_b0", "i2c_sck_b0", "i2c_sda_b1", "i2c_sck_b1" +static const char * const i2c_b0_groups[] = { + "i2c_sda_b0", "i2c_sck_b0" +}; + +static const char * const i2c_b1_groups[] = { + "i2c_sda_b1", "i2c_sck_b1" }; static const char * const sd_c_groups[] = { @@ -843,15 +856,18 @@ static struct meson_pmx_func meson8b_cbus_functions[] = { FUNCTION(uart_a), FUNCTION(uart_b), FUNCTION(iso7816), - FUNCTION(i2c_d), + FUNCTION(i2c_d0), + FUNCTION(i2c_d1), FUNCTION(xtal), FUNCTION(uart_c), - FUNCTION(i2c_c), + FUNCTION(i2c_c0), + FUNCTION(i2c_c1), FUNCTION(hdmi), FUNCTION(spi), FUNCTION(ethernet), FUNCTION(i2c_a), - FUNCTION(i2c_b), + FUNCTION(i2c_b0), + FUNCTION(i2c_b1), FUNCTION(sd_c), FUNCTION(sdxc_c), FUNCTION(nand),