1ea65c980SMasahiro Yamada /* 2ea65c980SMasahiro Yamada * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com> 3ea65c980SMasahiro Yamada * 4ea65c980SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 5ea65c980SMasahiro Yamada */ 6ea65c980SMasahiro Yamada 7ea65c980SMasahiro Yamada #include <dm/device.h> 8ea65c980SMasahiro Yamada #include <dm/pinctrl.h> 9ea65c980SMasahiro Yamada 10ea65c980SMasahiro Yamada #include "pinctrl-uniphier.h" 11ea65c980SMasahiro Yamada 12ac13ce49SMasahiro Yamada static const struct uniphier_pinctrl_pin uniphier_pro4_pins[] = { 13ea65c980SMasahiro Yamada }; 14ea65c980SMasahiro Yamada 15ea65c980SMasahiro Yamada static const unsigned emmc_pins[] = {40, 41, 42, 43, 51, 52, 53}; 165e25b9d5SMasahiro Yamada static const int emmc_muxvals[] = {1, 1, 1, 1, 1, 1, 1}; 17ea65c980SMasahiro Yamada static const unsigned emmc_dat8_pins[] = {44, 45, 46, 47}; 185e25b9d5SMasahiro Yamada static const int emmc_dat8_muxvals[] = {1, 1, 1, 1}; 19*fc9da85cSMasahiro Yamada static const unsigned ether_mii_pins[] = {160, 161, 162, 163, 164, 165, 166, 20*fc9da85cSMasahiro Yamada 167, 168, 169, 170, 171, 172, 173, 21*fc9da85cSMasahiro Yamada 174, 175, 176, 177, 178, 179}; 22*fc9da85cSMasahiro Yamada static const int ether_mii_muxvals[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23*fc9da85cSMasahiro Yamada 0, 0, 0, 0, 0, 0, 0}; 24*fc9da85cSMasahiro Yamada static const unsigned ether_rgmii_pins[] = {160, 161, 162, 163, 164, 165, 167, 25*fc9da85cSMasahiro Yamada 168, 169, 170, 171, 172, 176, 177, 26*fc9da85cSMasahiro Yamada 178, 179}; 27*fc9da85cSMasahiro Yamada static const int ether_rgmii_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28*fc9da85cSMasahiro Yamada 0, 0, 0, 0}; 29*fc9da85cSMasahiro Yamada static const unsigned ether_rmii_pins[] = {160, 161, 162, 165, 168, 169, 172, 30*fc9da85cSMasahiro Yamada 173, 176, 177, 178, 179}; 31*fc9da85cSMasahiro Yamada static const int ether_rmii_muxvals[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 32*fc9da85cSMasahiro Yamada static const unsigned ether_rmiib_pins[] = {161, 162, 165, 167, 168, 169, 172, 33*fc9da85cSMasahiro Yamada 173, 176, 177, 178, 179}; 34*fc9da85cSMasahiro Yamada static const int ether_rmiib_muxvals[] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}; 35ea65c980SMasahiro Yamada static const unsigned i2c0_pins[] = {142, 143}; 365e25b9d5SMasahiro Yamada static const int i2c0_muxvals[] = {0, 0}; 37ea65c980SMasahiro Yamada static const unsigned i2c1_pins[] = {144, 145}; 385e25b9d5SMasahiro Yamada static const int i2c1_muxvals[] = {0, 0}; 39ea65c980SMasahiro Yamada static const unsigned i2c2_pins[] = {146, 147}; 405e25b9d5SMasahiro Yamada static const int i2c2_muxvals[] = {0, 0}; 41ea65c980SMasahiro Yamada static const unsigned i2c3_pins[] = {148, 149}; 425e25b9d5SMasahiro Yamada static const int i2c3_muxvals[] = {0, 0}; 43ea65c980SMasahiro Yamada static const unsigned i2c6_pins[] = {308, 309}; 445e25b9d5SMasahiro Yamada static const int i2c6_muxvals[] = {6, 6}; 45ea65c980SMasahiro Yamada static const unsigned nand_pins[] = {40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 46ea65c980SMasahiro Yamada 50, 51, 52, 53, 54}; 475e25b9d5SMasahiro Yamada static const int nand_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 48ea65c980SMasahiro Yamada static const unsigned nand_cs1_pins[] = {131, 132}; 495e25b9d5SMasahiro Yamada static const int nand_cs1_muxvals[] = {1, 1}; 50ea65c980SMasahiro Yamada static const unsigned sd_pins[] = {150, 151, 152, 153, 154, 155, 156, 157, 158}; 515e25b9d5SMasahiro Yamada static const int sd_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 52ea65c980SMasahiro Yamada static const unsigned sd1_pins[] = {319, 320, 321, 322, 323, 324, 325, 326, 53ea65c980SMasahiro Yamada 327}; 545e25b9d5SMasahiro Yamada static const int sd1_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 55ea65c980SMasahiro Yamada static const unsigned uart0_pins[] = {127, 128}; 565e25b9d5SMasahiro Yamada static const int uart0_muxvals[] = {0, 0}; 57ea65c980SMasahiro Yamada static const unsigned uart1_pins[] = {129, 130}; 585e25b9d5SMasahiro Yamada static const int uart1_muxvals[] = {0, 0}; 59ea65c980SMasahiro Yamada static const unsigned uart2_pins[] = {131, 132}; 605e25b9d5SMasahiro Yamada static const int uart2_muxvals[] = {0, 0}; 61ea65c980SMasahiro Yamada static const unsigned uart3_pins[] = {88, 89}; 625e25b9d5SMasahiro Yamada static const int uart3_muxvals[] = {2, 2}; 63ea65c980SMasahiro Yamada static const unsigned usb0_pins[] = {180, 181}; 645e25b9d5SMasahiro Yamada static const int usb0_muxvals[] = {0, 0}; 65ea65c980SMasahiro Yamada static const unsigned usb1_pins[] = {182, 183}; 665e25b9d5SMasahiro Yamada static const int usb1_muxvals[] = {0, 0}; 67ea65c980SMasahiro Yamada static const unsigned usb2_pins[] = {184, 185}; 685e25b9d5SMasahiro Yamada static const int usb2_muxvals[] = {0, 0}; 69ea65c980SMasahiro Yamada static const unsigned usb3_pins[] = {186, 187}; 705e25b9d5SMasahiro Yamada static const int usb3_muxvals[] = {0, 0}; 71ea65c980SMasahiro Yamada 72ac13ce49SMasahiro Yamada static const struct uniphier_pinctrl_group uniphier_pro4_groups[] = { 7364c1cc4cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP_SPL(emmc), 7464c1cc4cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP_SPL(emmc_dat8), 75*fc9da85cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP(ether_mii), 76*fc9da85cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP(ether_rgmii), 77*fc9da85cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP(ether_rmii), 78*fc9da85cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP(ether_rmiib), 79ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c0), 80ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c1), 81ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c2), 82ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c3), 83ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c6), 84ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(nand), 85ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(nand_cs1), 86ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(sd), 87ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(sd1), 8864c1cc4cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP_SPL(uart0), 8964c1cc4cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP_SPL(uart1), 9064c1cc4cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP_SPL(uart2), 9164c1cc4cSMasahiro Yamada UNIPHIER_PINCTRL_GROUP_SPL(uart3), 92ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb0), 93ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb1), 94ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb2), 95ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb3), 96ea65c980SMasahiro Yamada }; 97ea65c980SMasahiro Yamada 98ac13ce49SMasahiro Yamada static const char * const uniphier_pro4_functions[] = { 9964c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION_SPL(emmc), 100*fc9da85cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(ether_mii), 101*fc9da85cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(ether_rgmii), 102*fc9da85cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(ether_rmii), 10364c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(i2c0), 10464c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(i2c1), 10564c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(i2c2), 10664c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(i2c3), 10764c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(i2c6), 10864c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(nand), 10964c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(sd), 11064c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(sd1), 11164c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION_SPL(uart0), 11264c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION_SPL(uart1), 11364c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION_SPL(uart2), 11464c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION_SPL(uart3), 11564c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(usb0), 11664c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(usb1), 11764c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(usb2), 11864c1cc4cSMasahiro Yamada UNIPHIER_PINMUX_FUNCTION(usb3), 119ea65c980SMasahiro Yamada }; 120ea65c980SMasahiro Yamada 121ac13ce49SMasahiro Yamada static struct uniphier_pinctrl_socdata uniphier_pro4_pinctrl_socdata = { 122ac13ce49SMasahiro Yamada .pins = uniphier_pro4_pins, 123ac13ce49SMasahiro Yamada .pins_count = ARRAY_SIZE(uniphier_pro4_pins), 124ac13ce49SMasahiro Yamada .groups = uniphier_pro4_groups, 125ac13ce49SMasahiro Yamada .groups_count = ARRAY_SIZE(uniphier_pro4_groups), 126ac13ce49SMasahiro Yamada .functions = uniphier_pro4_functions, 127ac13ce49SMasahiro Yamada .functions_count = ARRAY_SIZE(uniphier_pro4_functions), 1288cc92b99SMasahiro Yamada .caps = UNIPHIER_PINCTRL_CAPS_DBGMUX_SEPARATE, 129ea65c980SMasahiro Yamada }; 130ea65c980SMasahiro Yamada 131ac13ce49SMasahiro Yamada static int uniphier_pro4_pinctrl_probe(struct udevice *dev) 132ea65c980SMasahiro Yamada { 133ac13ce49SMasahiro Yamada return uniphier_pinctrl_probe(dev, &uniphier_pro4_pinctrl_socdata); 134ea65c980SMasahiro Yamada } 135ea65c980SMasahiro Yamada 136ac13ce49SMasahiro Yamada static const struct udevice_id uniphier_pro4_pinctrl_match[] = { 137186c1334SMasahiro Yamada { .compatible = "socionext,uniphier-pro4-pinctrl" }, 138ea65c980SMasahiro Yamada { /* sentinel */ } 139ea65c980SMasahiro Yamada }; 140ea65c980SMasahiro Yamada 141ac13ce49SMasahiro Yamada U_BOOT_DRIVER(uniphier_pro4_pinctrl) = { 142ac13ce49SMasahiro Yamada .name = "uniphier-pro4-pinctrl", 143ea65c980SMasahiro Yamada .id = UCLASS_PINCTRL, 144ac13ce49SMasahiro Yamada .of_match = of_match_ptr(uniphier_pro4_pinctrl_match), 145ac13ce49SMasahiro Yamada .probe = uniphier_pro4_pinctrl_probe, 146ea65c980SMasahiro Yamada .remove = uniphier_pinctrl_remove, 147ea65c980SMasahiro Yamada .priv_auto_alloc_size = sizeof(struct uniphier_pinctrl_priv), 148ea65c980SMasahiro Yamada .ops = &uniphier_pinctrl_ops, 149ea65c980SMasahiro Yamada .flags = DM_FLAG_PRE_RELOC, 150ea65c980SMasahiro Yamada }; 151