diff options
Diffstat (limited to 'drivers/pinctrl/pinctrl-u300.c')
-rw-r--r-- | drivers/pinctrl/pinctrl-u300.c | 97 |
1 files changed, 12 insertions, 85 deletions
diff --git a/drivers/pinctrl/pinctrl-u300.c b/drivers/pinctrl/pinctrl-u300.c index 309f5b9a70ec..b84de03ed54d 100644 --- a/drivers/pinctrl/pinctrl-u300.c +++ b/drivers/pinctrl/pinctrl-u300.c | |||
@@ -663,8 +663,6 @@ static const struct pinctrl_pin_desc u300_pads[] = { | |||
663 | struct u300_pmx { | 663 | struct u300_pmx { |
664 | struct device *dev; | 664 | struct device *dev; |
665 | struct pinctrl_dev *pctl; | 665 | struct pinctrl_dev *pctl; |
666 | u32 phybase; | ||
667 | u32 physize; | ||
668 | void __iomem *virtbase; | 666 | void __iomem *virtbase; |
669 | }; | 667 | }; |
670 | 668 | ||
@@ -1013,52 +1011,11 @@ static struct pinmux_ops u300_pmx_ops = { | |||
1013 | .disable = u300_pmx_disable, | 1011 | .disable = u300_pmx_disable, |
1014 | }; | 1012 | }; |
1015 | 1013 | ||
1016 | /* | 1014 | static int u300_pin_config_get(struct pinctrl_dev *pctldev, unsigned pin, |
1017 | * GPIO ranges handled by the application-side COH901XXX GPIO controller | 1015 | unsigned long *config) |
1018 | * Very many pins can be converted into GPIO pins, but we only list those | ||
1019 | * that are useful in practice to cut down on tables. | ||
1020 | */ | ||
1021 | #define U300_GPIO_RANGE(a, b, c) { .name = "COH901XXX", .id = a, .base= a, \ | ||
1022 | .pin_base = b, .npins = c } | ||
1023 | |||
1024 | static struct pinctrl_gpio_range u300_gpio_ranges[] = { | ||
1025 | U300_GPIO_RANGE(10, 426, 1), | ||
1026 | U300_GPIO_RANGE(11, 180, 1), | ||
1027 | U300_GPIO_RANGE(12, 165, 1), /* MS/MMC card insertion */ | ||
1028 | U300_GPIO_RANGE(13, 179, 1), | ||
1029 | U300_GPIO_RANGE(14, 178, 1), | ||
1030 | U300_GPIO_RANGE(16, 194, 1), | ||
1031 | U300_GPIO_RANGE(17, 193, 1), | ||
1032 | U300_GPIO_RANGE(18, 192, 1), | ||
1033 | U300_GPIO_RANGE(19, 191, 1), | ||
1034 | U300_GPIO_RANGE(20, 186, 1), | ||
1035 | U300_GPIO_RANGE(21, 185, 1), | ||
1036 | U300_GPIO_RANGE(22, 184, 1), | ||
1037 | U300_GPIO_RANGE(23, 183, 1), | ||
1038 | U300_GPIO_RANGE(24, 182, 1), | ||
1039 | U300_GPIO_RANGE(25, 181, 1), | ||
1040 | }; | ||
1041 | |||
1042 | static struct pinctrl_gpio_range *u300_match_gpio_range(unsigned pin) | ||
1043 | { | ||
1044 | int i; | ||
1045 | |||
1046 | for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++) { | ||
1047 | struct pinctrl_gpio_range *range; | ||
1048 | |||
1049 | range = &u300_gpio_ranges[i]; | ||
1050 | if (pin >= range->pin_base && | ||
1051 | pin <= (range->pin_base + range->npins - 1)) | ||
1052 | return range; | ||
1053 | } | ||
1054 | return NULL; | ||
1055 | } | ||
1056 | |||
1057 | int u300_pin_config_get(struct pinctrl_dev *pctldev, | ||
1058 | unsigned pin, | ||
1059 | unsigned long *config) | ||
1060 | { | 1016 | { |
1061 | struct pinctrl_gpio_range *range = u300_match_gpio_range(pin); | 1017 | struct pinctrl_gpio_range *range = |
1018 | pinctrl_find_gpio_range_from_pin(pctldev, pin); | ||
1062 | 1019 | ||
1063 | /* We get config for those pins we CAN get it for and that's it */ | 1020 | /* We get config for those pins we CAN get it for and that's it */ |
1064 | if (!range) | 1021 | if (!range) |
@@ -1069,11 +1026,11 @@ int u300_pin_config_get(struct pinctrl_dev *pctldev, | |||
1069 | config); | 1026 | config); |
1070 | } | 1027 | } |
1071 | 1028 | ||
1072 | int u300_pin_config_set(struct pinctrl_dev *pctldev, | 1029 | static int u300_pin_config_set(struct pinctrl_dev *pctldev, unsigned pin, |
1073 | unsigned pin, | 1030 | unsigned long config) |
1074 | unsigned long config) | ||
1075 | { | 1031 | { |
1076 | struct pinctrl_gpio_range *range = u300_match_gpio_range(pin); | 1032 | struct pinctrl_gpio_range *range = |
1033 | pinctrl_find_gpio_range_from_pin(pctldev, pin); | ||
1077 | int ret; | 1034 | int ret; |
1078 | 1035 | ||
1079 | if (!range) | 1036 | if (!range) |
@@ -1109,9 +1066,6 @@ static int __devinit u300_pmx_probe(struct platform_device *pdev) | |||
1109 | { | 1066 | { |
1110 | struct u300_pmx *upmx; | 1067 | struct u300_pmx *upmx; |
1111 | struct resource *res; | 1068 | struct resource *res; |
1112 | struct gpio_chip *gpio_chip = dev_get_platdata(&pdev->dev); | ||
1113 | int ret; | ||
1114 | int i; | ||
1115 | 1069 | ||
1116 | /* Create state holders etc for this driver */ | 1070 | /* Create state holders etc for this driver */ |
1117 | upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL); | 1071 | upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL); |
@@ -1123,32 +1077,15 @@ static int __devinit u300_pmx_probe(struct platform_device *pdev) | |||
1123 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 1077 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
1124 | if (!res) | 1078 | if (!res) |
1125 | return -ENOENT; | 1079 | return -ENOENT; |
1126 | upmx->phybase = res->start; | ||
1127 | upmx->physize = resource_size(res); | ||
1128 | |||
1129 | if (request_mem_region(upmx->phybase, upmx->physize, | ||
1130 | DRIVER_NAME) == NULL) { | ||
1131 | ret = -ENOMEM; | ||
1132 | goto out_no_memregion; | ||
1133 | } | ||
1134 | 1080 | ||
1135 | upmx->virtbase = ioremap(upmx->phybase, upmx->physize); | 1081 | upmx->virtbase = devm_request_and_ioremap(&pdev->dev, res); |
1136 | if (!upmx->virtbase) { | 1082 | if (!upmx->virtbase) |
1137 | ret = -ENOMEM; | 1083 | return -ENOMEM; |
1138 | goto out_no_remap; | ||
1139 | } | ||
1140 | 1084 | ||
1141 | upmx->pctl = pinctrl_register(&u300_pmx_desc, &pdev->dev, upmx); | 1085 | upmx->pctl = pinctrl_register(&u300_pmx_desc, &pdev->dev, upmx); |
1142 | if (!upmx->pctl) { | 1086 | if (!upmx->pctl) { |
1143 | dev_err(&pdev->dev, "could not register U300 pinmux driver\n"); | 1087 | dev_err(&pdev->dev, "could not register U300 pinmux driver\n"); |
1144 | ret = -EINVAL; | 1088 | return -EINVAL; |
1145 | goto out_no_pmx; | ||
1146 | } | ||
1147 | |||
1148 | /* We will handle a range of GPIO pins */ | ||
1149 | for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++) { | ||
1150 | u300_gpio_ranges[i].gc = gpio_chip; | ||
1151 | pinctrl_add_gpio_range(upmx->pctl, &u300_gpio_ranges[i]); | ||
1152 | } | 1089 | } |
1153 | 1090 | ||
1154 | platform_set_drvdata(pdev, upmx); | 1091 | platform_set_drvdata(pdev, upmx); |
@@ -1156,14 +1093,6 @@ static int __devinit u300_pmx_probe(struct platform_device *pdev) | |||
1156 | dev_info(&pdev->dev, "initialized U300 pin control driver\n"); | 1093 | dev_info(&pdev->dev, "initialized U300 pin control driver\n"); |
1157 | 1094 | ||
1158 | return 0; | 1095 | return 0; |
1159 | |||
1160 | out_no_pmx: | ||
1161 | iounmap(upmx->virtbase); | ||
1162 | out_no_remap: | ||
1163 | platform_set_drvdata(pdev, NULL); | ||
1164 | out_no_memregion: | ||
1165 | release_mem_region(upmx->phybase, upmx->physize); | ||
1166 | return ret; | ||
1167 | } | 1096 | } |
1168 | 1097 | ||
1169 | static int __devexit u300_pmx_remove(struct platform_device *pdev) | 1098 | static int __devexit u300_pmx_remove(struct platform_device *pdev) |
@@ -1171,8 +1100,6 @@ static int __devexit u300_pmx_remove(struct platform_device *pdev) | |||
1171 | struct u300_pmx *upmx = platform_get_drvdata(pdev); | 1100 | struct u300_pmx *upmx = platform_get_drvdata(pdev); |
1172 | 1101 | ||
1173 | pinctrl_unregister(upmx->pctl); | 1102 | pinctrl_unregister(upmx->pctl); |
1174 | iounmap(upmx->virtbase); | ||
1175 | release_mem_region(upmx->phybase, upmx->physize); | ||
1176 | platform_set_drvdata(pdev, NULL); | 1103 | platform_set_drvdata(pdev, NULL); |
1177 | 1104 | ||
1178 | return 0; | 1105 | return 0; |