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 12*ac13ce49SMasahiro Yamada static const struct uniphier_pinctrl_pin uniphier_ld4_pins[] = { 13ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(53, 0), 14ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(54, 0), 15ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(55, 0), 16ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(56, 0), 17ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(67, 0), 18ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(68, 0), 19ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(69, 0), 20ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(70, 0), 21ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(85, 0), 22ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(88, 0), 23ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_PIN(156, 0), 24ea65c980SMasahiro Yamada }; 25ea65c980SMasahiro Yamada 26ea65c980SMasahiro Yamada static const unsigned emmc_pins[] = {21, 22, 23, 24, 25, 26, 27}; 27ea65c980SMasahiro Yamada static const unsigned emmc_muxvals[] = {0, 1, 1, 1, 1, 1, 1}; 28ea65c980SMasahiro Yamada static const unsigned emmc_dat8_pins[] = {28, 29, 30, 31}; 29ea65c980SMasahiro Yamada static const unsigned emmc_dat8_muxvals[] = {1, 1, 1, 1}; 30ea65c980SMasahiro Yamada static const unsigned i2c0_pins[] = {102, 103}; 31ea65c980SMasahiro Yamada static const unsigned i2c0_muxvals[] = {0, 0}; 32ea65c980SMasahiro Yamada static const unsigned i2c1_pins[] = {104, 105}; 33ea65c980SMasahiro Yamada static const unsigned i2c1_muxvals[] = {0, 0}; 34ea65c980SMasahiro Yamada static const unsigned i2c2_pins[] = {108, 109}; 35ea65c980SMasahiro Yamada static const unsigned i2c2_muxvals[] = {2, 2}; 36ea65c980SMasahiro Yamada static const unsigned i2c3_pins[] = {108, 109}; 37ea65c980SMasahiro Yamada static const unsigned i2c3_muxvals[] = {3, 3}; 38ea65c980SMasahiro Yamada static const unsigned nand_pins[] = {24, 25, 26, 27, 28, 29, 30, 31, 158, 159, 39ea65c980SMasahiro Yamada 160, 161, 162, 163, 164}; 40ea65c980SMasahiro Yamada static const unsigned nand_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41ea65c980SMasahiro Yamada 0, 0}; 42ea65c980SMasahiro Yamada static const unsigned nand_cs1_pins[] = {22, 23}; 43ea65c980SMasahiro Yamada static const unsigned nand_cs1_muxvals[] = {0, 0}; 44ea65c980SMasahiro Yamada static const unsigned sd_pins[] = {44, 45, 46, 47, 48, 49, 50, 51, 52}; 45ea65c980SMasahiro Yamada static const unsigned sd_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 46ea65c980SMasahiro Yamada static const unsigned uart0_pins[] = {85, 88}; 47ea65c980SMasahiro Yamada static const unsigned uart0_muxvals[] = {1, 1}; 48ea65c980SMasahiro Yamada static const unsigned uart1_pins[] = {155, 156}; 49ea65c980SMasahiro Yamada static const unsigned uart1_muxvals[] = {13, 13}; 50ea65c980SMasahiro Yamada static const unsigned uart1b_pins[] = {69, 70}; 51ea65c980SMasahiro Yamada static const unsigned uart1b_muxvals[] = {23, 23}; 52ea65c980SMasahiro Yamada static const unsigned uart2_pins[] = {128, 129}; 53ea65c980SMasahiro Yamada static const unsigned uart2_muxvals[] = {13, 13}; 54ea65c980SMasahiro Yamada static const unsigned uart3_pins[] = {110, 111}; 55ea65c980SMasahiro Yamada static const unsigned uart3_muxvals[] = {1, 1}; 56ea65c980SMasahiro Yamada static const unsigned usb0_pins[] = {53, 54}; 57ea65c980SMasahiro Yamada static const unsigned usb0_muxvals[] = {0, 0}; 58ea65c980SMasahiro Yamada static const unsigned usb1_pins[] = {55, 56}; 59ea65c980SMasahiro Yamada static const unsigned usb1_muxvals[] = {0, 0}; 60ea65c980SMasahiro Yamada static const unsigned usb2_pins[] = {155, 156}; 61ea65c980SMasahiro Yamada static const unsigned usb2_muxvals[] = {4, 4}; 62ea65c980SMasahiro Yamada static const unsigned usb2b_pins[] = {67, 68}; 63ea65c980SMasahiro Yamada static const unsigned usb2b_muxvals[] = {23, 23}; 64ea65c980SMasahiro Yamada 65*ac13ce49SMasahiro Yamada static const struct uniphier_pinctrl_group uniphier_ld4_groups[] = { 66ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(emmc), 67ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(emmc_dat8), 68ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c0), 69ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c1), 70ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c2), 71ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(i2c3), 72ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(nand), 73ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(nand_cs1), 74ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(sd), 75ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(uart0), 76ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(uart1), 77ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(uart1b), 78ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(uart2), 79ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(uart3), 80ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb0), 81ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb1), 82ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb2), 83ea65c980SMasahiro Yamada UNIPHIER_PINCTRL_GROUP(usb2b), 84ea65c980SMasahiro Yamada }; 85ea65c980SMasahiro Yamada 86*ac13ce49SMasahiro Yamada static const char * const uniphier_ld4_functions[] = { 87ea65c980SMasahiro Yamada "emmc", 88ea65c980SMasahiro Yamada "i2c0", 89ea65c980SMasahiro Yamada "i2c1", 90ea65c980SMasahiro Yamada "i2c2", 91ea65c980SMasahiro Yamada "i2c3", 92ea65c980SMasahiro Yamada "nand", 93ea65c980SMasahiro Yamada "sd", 94ea65c980SMasahiro Yamada "uart0", 95ea65c980SMasahiro Yamada "uart1", 96ea65c980SMasahiro Yamada "uart2", 97ea65c980SMasahiro Yamada "uart3", 98ea65c980SMasahiro Yamada "usb0", 99ea65c980SMasahiro Yamada "usb1", 100ea65c980SMasahiro Yamada "usb2", 101ea65c980SMasahiro Yamada }; 102ea65c980SMasahiro Yamada 103*ac13ce49SMasahiro Yamada static struct uniphier_pinctrl_socdata uniphier_ld4_pinctrl_socdata = { 104*ac13ce49SMasahiro Yamada .pins = uniphier_ld4_pins, 105*ac13ce49SMasahiro Yamada .pins_count = ARRAY_SIZE(uniphier_ld4_pins), 106*ac13ce49SMasahiro Yamada .groups = uniphier_ld4_groups, 107*ac13ce49SMasahiro Yamada .groups_count = ARRAY_SIZE(uniphier_ld4_groups), 108*ac13ce49SMasahiro Yamada .functions = uniphier_ld4_functions, 109*ac13ce49SMasahiro Yamada .functions_count = ARRAY_SIZE(uniphier_ld4_functions), 110ea65c980SMasahiro Yamada }; 111ea65c980SMasahiro Yamada 112*ac13ce49SMasahiro Yamada static int uniphier_ld4_pinctrl_probe(struct udevice *dev) 113ea65c980SMasahiro Yamada { 114*ac13ce49SMasahiro Yamada return uniphier_pinctrl_probe(dev, &uniphier_ld4_pinctrl_socdata); 115ea65c980SMasahiro Yamada } 116ea65c980SMasahiro Yamada 117*ac13ce49SMasahiro Yamada static const struct udevice_id uniphier_ld4_pinctrl_match[] = { 118ea65c980SMasahiro Yamada { .compatible = "socionext,ph1-ld4-pinctrl" }, 119ea65c980SMasahiro Yamada { /* sentinel */ } 120ea65c980SMasahiro Yamada }; 121ea65c980SMasahiro Yamada 122*ac13ce49SMasahiro Yamada U_BOOT_DRIVER(uniphier_ld4_pinctrl) = { 123*ac13ce49SMasahiro Yamada .name = "uniphier-ld4-pinctrl", 124ea65c980SMasahiro Yamada .id = UCLASS_PINCTRL, 125*ac13ce49SMasahiro Yamada .of_match = of_match_ptr(uniphier_ld4_pinctrl_match), 126*ac13ce49SMasahiro Yamada .probe = uniphier_ld4_pinctrl_probe, 127ea65c980SMasahiro Yamada .remove = uniphier_pinctrl_remove, 128ea65c980SMasahiro Yamada .priv_auto_alloc_size = sizeof(struct uniphier_pinctrl_priv), 129ea65c980SMasahiro Yamada .ops = &uniphier_pinctrl_ops, 130ea65c980SMasahiro Yamada }; 131