From 5dc9dc626009c63d99c344e9703b8b8716d35572 Mon Sep 17 00:00:00 2001 From: luowei Date: Thu, 10 Jul 2014 22:44:20 +0800 Subject: [PATCH] pinctrl:add rk3036 handler in pinctrl driver --- arch/arm/boot/dts/rk3036-pinctrl.dtsi | 581 ++++++++++--------------- drivers/pinctrl/pinctrl-rockchip.c | 49 +++ include/dt-bindings/pinctrl/rockchip.h | 5 + 3 files changed, 276 insertions(+), 359 deletions(-) diff --git a/arch/arm/boot/dts/rk3036-pinctrl.dtsi b/arch/arm/boot/dts/rk3036-pinctrl.dtsi index 75ef0830a27e..d60816c4e41b 100755 --- a/arch/arm/boot/dts/rk3036-pinctrl.dtsi +++ b/arch/arm/boot/dts/rk3036-pinctrl.dtsi @@ -16,13 +16,10 @@ ranges; gpio0: gpio0@2007c000 { - compatible = "rockchip,rk3036-gpio-bank0"; - reg = <0x2007c000 0x100>, - <0x2007c000 0>; - - reg-names = "base", "pull_bank0"; + compatible = "rockchip,gpio-bank"; + reg = <0x2007c000 0x100>; interrupts = ; - //clocks = <&clk_gates8 9>; + clocks = <&clk_gates8 9>; gpio-controller; #gpio-cells = <2>; @@ -48,7 +45,7 @@ compatible = "rockchip,gpio-bank"; reg = <0x20084000 0x100>; interrupts = ; - //clocks = <&clk_gates8 11>; + clocks = <&clk_gates8 11>; gpio-controller; #gpio-cells = <2>; @@ -61,7 +58,7 @@ compatible = "rockchip,gpio-bank"; reg = <0x20086000 0x100>; interrupts = ;//127 = 160-32-1 - //clocks = <&clk_gates8 12>; + clocks = <&clk_gates8 12>; gpio-controller; #gpio-cells = <2>; @@ -82,35 +79,33 @@ bias-disable; }; - gpio1_uart0 { + gpio0_uart0 { uart0_xfer: uart0-xfer { rockchip,pins = , ; rockchip,pull = ; - rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; uart0_cts: uart0-cts { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; uart0_rts: uart0-rts { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; uart0_rts_gpio: uart0-rts-gpio { rockchip,pins = ; - rockchip,drive = ; + rockchip,pull = ; + //rockchip,drive = ; }; }; @@ -119,9 +114,8 @@ rockchip,pins = , ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; }; @@ -131,123 +125,112 @@ rockchip,pins = , ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; /* no rts / cts for uart2 */ }; - gpio1_i2c0 { + gpio0_i2c0 { i2c0_sda:i2c0-sda { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; i2c0_scl:i2c0-scl { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; i2c0_gpio: i2c0-gpio { rockchip,pins = , ; - rockchip,drive = ; + rockchip,pull = ; + //rockchip,drive = ; }; }; - gpio1_i2c1 { + gpio0_i2c1 { i2c1_sda:i2c1-sda { rockchip,pins = ; rockchip,pull = ; - rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; i2c1_scl:i2c1-scl { rockchip,pins = ; rockchip,pull = ; - rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; i2c1_gpio: i2c1-gpio { rockchip,pins = , ; - rockchip,drive = ; + //rockchip,drive = ; }; }; - gpio1_i2c2 { + gpio2_i2c2 { i2c2_sda:i2c2-sda { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; i2c2_scl:i2c2-scl { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; i2c2_gpio: i2c2-gpio { rockchip,pins = , ; - rockchip,drive = ; + rockchip,pull = ; + //rockchip,drive = ; }; }; - gpio1_spi0 { spi0_txd:spi0-txd { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; spi0_rxd:spi0-rxd { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; spi0_clk:spi0-clk { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; spi0_cs0:spi0-cs0 { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; spi0_cs1:spi0-cs1 { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; + //rockchip,drive = ; + }; }; @@ -256,91 +239,69 @@ hdmi_cec:hdmi-cec { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; + //rockchip,drive = ; }; hdmi_sda:hdmi-sda { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; + //rockchip,drive = ; }; hdmi_scl:hdmi-scl { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; + //rockchip,drive = ; }; hdmi_hpd:hdmi-hpd { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; + //rockchip,drive = ; }; hdmi_gpio: hdmi-gpio { rockchip,pins = , , , ; - rockchip,drive = ; + rockchip,pull = ; + //rockchip,drive = ; }; - }; + }; gpio1_i2s0 { - i2s0_mclk:i2s0-mclk { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; - + //rockchip,drive = ; }; i2s0_sclk:i2s0-sclk { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; - + //rockchip,drive = ; }; i2s0_lrckrx:i2s0-lrckrx { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; - + //rockchip,drive = ; }; i2s0_lrcktx:i2s0-lrcktx { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; - + //rockchip,drive = ; }; i2s0_sdo:i2s0-sdo { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; - + //rockchip,drive = ; }; i2s0_sdi:i2s0-sdi { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; - + //rockchip,drive = ; }; i2s0_gpio: i2s0-gpio { @@ -350,316 +311,218 @@ , , ; - rockchip,drive = ; + rockchip,pull = ; + //rockchip,drive = ; }; }; - gpio1_spdif { spdif_tx: spdif-tx { rockchip,pins = ; rockchip,pull = ; - //rockchip,voltage = ; - rockchip,drive = ; - //rockchip,tristate = ; - + //rockchip,drive = ; }; }; gpio1_emmc0 { - emmc0_clk: emmc0-clk { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - emmc0_cmd: emmc0-cmd { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - - emmc0_bus1: emmc0-bus-width1 { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - emmc0_bus4: emmc0-bus-width4 { - rockchip,pins = , - , - , - ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - }; - - gpio1_sdmmc0 { - sdmmc0_clk: sdmmc0-clk { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdmmc0_cmd: sdmmc0-cmd { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdmmc0_dectn: sdmmc0-dectn{ - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - - sdmmc0_bus1: sdmmc0-bus-width1 { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdmmc0_bus4: sdmmc0-bus-width4 { - rockchip,pins = , - , - , - ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdmmc0_gpio: sdmmc0_gpio{ - rockchip,pins = - , //CMD - , //CLK - , //DET - , //D0 - , //D1 - , //D2 - ; //D3 - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - }; - gpio0_sdio0 { + emmc0_clk: emmc0-clk { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; - sdio0_clk: sdio0_clk { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdio0_cmd: sdio0_cmd { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdio0_bus1: sdio0-bus-width1 { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdio0_bus4: sdio0-bus-width4 { - rockchip,pins = , - , - , - ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - sdio0_gpio: sdio0-all-gpio{ - rockchip,pins = - , //CLK - , //CMD - , //DO - , //D1 - , //D2 - ; //D3 - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - }; - gpio0_pwm{ + }; - pwm0_pin:pwm0 { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - pwm1_pin:pwm1 { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - pwm2_pin:pwm2 { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - - pwm3_pin:pwm3 { - rockchip,pins = ; - rockchip,pull = ; - rockchip,drive = ; - //rockchip,tristate = ; - }; - }; + emmc0_cmd: emmc0-cmd { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; - vol_domain { - ap0_vcc:ap0-vcc { - rockchip,pins = ; - rockchip,voltage = ; }; - - ap1_vcc:ap1-vcc { - rockchip,pins = ; - rockchip,voltage = ; - }; - - cif_vcc:cif-vcc { - rockchip,pins = ; - rockchip,voltage = ; + + + emmc0_bus1: emmc0-bus-width1 { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - flash_vcc:flash-vcc { - rockchip,pins = ; - rockchip,voltage = ; + emmc0_bus4: emmc0-bus-width4 { + rockchip,pins = , + , + , + ; + rockchip,pull = ; + //rockchip,drive = ; + }; - - vccio0_vcc:vccio0-vcc { - rockchip,pins = ; - rockchip,voltage = ; + }; + + gpio1_sdmmc0 { + sdmmc0_clk: sdmmc0-clk { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - vccio1_vcc:vccio1-vcc { - rockchip,pins = ; - rockchip,voltage = ; + sdmmc0_cmd: sdmmc0-cmd { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; }; - lcdc0_vcc:lcdc0-vcc { - rockchip,pins = ; - rockchip,voltage = ; + sdmmc0_dectn: sdmmc0-dectn{ + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - lcdc1_vcc:lcdc1-vcc { - rockchip,pins = ; - rockchip,voltage = ; + + sdmmc0_bus1: sdmmc0-bus-width1 { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - - - ap0_vcc_18:ap0-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; + sdmmc0_bus4: sdmmc0-bus-width4 { + rockchip,pins = , + , + , + ; + rockchip,pull = ; + //rockchip,drive = ; + }; - - ap1_vcc_18:ap1-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; + + sdmmc0_gpio: sdmmc0_gpio{ + rockchip,pins = + , //CMD + , //CLK + , //DET + , //D0 + , //D1 + , //D2 + ; //D3 + rockchip,pull = ; + //rockchip,drive = ; + }; - - cif_vcc_18:cif-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; + + }; + + gpio0_sdio0 { + sdio0_clk: sdio0_clk { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - flash_vcc_18:flash-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; + sdio0_cmd: sdio0_cmd { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - - vccio0_vcc_18:vccio0-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; + + sdio0_bus1: sdio0-bus-width1 { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - vccio1_vcc_18:vccio1-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; + sdio0_bus4: sdio0-bus-width4 { + rockchip,pins = , + , + , + ; + rockchip,pull = ; + //rockchip,drive = ; + }; - lcdc0_vcc_18:lcdc0-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; + sdio0_gpio: sdio0-all-gpio{ + rockchip,pins = + , //CLK + , //CMD + , //DO + , //D1 + , //D2 + ; //D3 + rockchip,pull = ; + //rockchip,drive = ; + }; + }; + + gpio0_pwm{ + pwm0_pin:pwm0 { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; - lcdc1_vcc_18:lcdc1-vcc-18 { - rockchip,pins = ; - rockchip,voltage = ; }; - + pwm1_pin:pwm1 { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; - ap0_vcc_33:ap0-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; }; - - ap1_vcc_33:ap1-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; + + pwm2_pin:pwm2 { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - - cif_vcc_33:cif-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; + + pwm3_pin:pwm3 { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; + }; - flash_vcc_33:flash-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; + gpio2_gmac { + mac_txpins: mac-txpins { + rockchip,pins = , , ; + rockchip,pull = ; + //rockchip,drive = ; + }; - vccio0_vcc_33:vccio0-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; + mac_rxpins: mac-rxpins { + rockchip,pins = , ,; + rockchip,pull = ; + //rockchip,drive = ; + }; - - vccio1_vcc_33:vccio1-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; + + mac_crs: mac-crs { + rockchip,pins = ; + rockchip,pull = ; + //rockchip,drive = ; + }; - - lcdc0_vcc_33:lcdc0-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; + + mac_mdpins: mac-mdpins { + rockchip,pins = , ; + rockchip,pull = ; + //rockchip,drive = ; + }; + }; - lcdc1_vcc_33:lcdc1-vcc-33 { - rockchip,pins = ; - rockchip,voltage = ; - }; + //to add - }; + + }; - //to add - }; }; diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index acb7a0916335..8a059b8c9498 100755 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -81,6 +81,7 @@ enum rockchip_pinctrl_type { RK3066B, RK3188, RK3288, + RK3036, }; enum rockchip_pin_bank_type { @@ -1211,6 +1212,25 @@ static void rk3288_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, } +static void rk3036_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank, + int pin_num, void __iomem **reg, u8 *bit) +{ + struct rockchip_pinctrl *info = bank->drvdata; + void __iomem *reg_base; + int pin = pin_num; + + *reg = info->reg_pull; + *reg += bank->bank_num * RK3036_PULL_BANK_STRIDE; + *reg += (pin_num / RK3036_PULL_PINS_PER_REG) * 4; + + *bit = pin_num % RK3036_PULL_PINS_PER_REG; + + reg_base = info->reg_pull; + + DBG_PINCTRL("%s:GPIO%d-%d, pull_reg=0x%x, bit=%d\n", __func__, bank->bank_num, pin_num, *reg - reg_base, *bit); +} + + #if 0 static int rockchip_get_pull(struct rockchip_pin_bank *bank, int pin_num) { @@ -1279,6 +1299,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank, switch (ctrl->type) { case RK2928: + case RK3036: spin_lock_irqsave(&bank->slock, flags); data = BIT(bit + 16); @@ -1337,6 +1358,7 @@ static bool rockchip_pinconf_pull_valid(struct rockchip_pin_ctrl *ctrl, { switch (ctrl->type) { case RK2928: + case RK3036: return (pull == PIN_CONFIG_BIAS_PULL_PIN_DEFAULT || pull == PIN_CONFIG_BIAS_DISABLE); case RK3066B: @@ -1685,6 +1707,10 @@ static int _rockchip_pinconf_set(struct rockchip_pin_bank *bank, break; + case RK3036: + //to do + break; + default: break; } @@ -3051,6 +3077,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev) break; case RK3188: + case RK3036: res = platform_get_resource(pdev, IORESOURCE_MEM, 0); info->reg_base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(info->reg_base)) @@ -3243,6 +3270,26 @@ static struct rockchip_pin_ctrl rk3288_pin_ctrl = { }; +static struct rockchip_pin_bank rk3036_pin_banks[] = { + PIN_BANK(0, 32, "gpio0"), + PIN_BANK(1, 32, "gpio1"), + PIN_BANK(2, 32, "gpio2"), + + PIN_BANK(15, 32, "gpio15"),//virtual bank +}; + +static struct rockchip_pin_ctrl rk3036_pin_ctrl = { + .pin_banks = rk3036_pin_banks, + .nr_banks = ARRAY_SIZE(rk3036_pin_banks), + .label = "rk3036-GPIO", + .type = RK3036, + .mux_offset = 0xa8, + .pull_calc_reg = rk3036_calc_pull_reg_and_bit, +}; + + + + static const struct of_device_id rockchip_pinctrl_dt_match[] = { { .compatible = "rockchip,rk2928-pinctrl", .data = (void *)&rk2928_pin_ctrl }, @@ -3254,6 +3301,8 @@ static const struct of_device_id rockchip_pinctrl_dt_match[] = { .data = (void *)&rk3188_pin_ctrl }, { .compatible = "rockchip,rk3288-pinctrl", .data = (void *)&rk3288_pin_ctrl }, + { .compatible = "rockchip,rk3036-pinctrl", + .data = (void *)&rk3036_pin_ctrl }, {}, }; MODULE_DEVICE_TABLE(of, rockchip_pinctrl_dt_match); diff --git a/include/dt-bindings/pinctrl/rockchip.h b/include/dt-bindings/pinctrl/rockchip.h index faf5fc4646a0..8735f39407bf 100755 --- a/include/dt-bindings/pinctrl/rockchip.h +++ b/include/dt-bindings/pinctrl/rockchip.h @@ -77,6 +77,11 @@ #define RK3188_PULL_PINS_PER_REG 8 #define RK3188_PULL_BANK_STRIDE 16 +#define RK3036_PULL_BITS_PER_PIN 1 +#define RK3036_PULL_PINS_PER_REG 16 +#define RK3036_PULL_BANK_STRIDE 8 + + /*warning:don not chang the following value*/ #define VALUE_PULL_NORMAL 0 -- 2.34.1