14 #include <linux/module.h>
15 #include <linux/device.h>
18 #include <linux/slab.h>
21 static struct pinctrl_gpio_range pxa3xx_pinctrl_gpio_range = {
22 .name =
"PXA3xx GPIO",
28 static int pxa3xx_get_groups_count(
struct pinctrl_dev *pctrldev)
35 static const char *pxa3xx_get_group_name(
struct pinctrl_dev *pctrldev,
40 return info->
grps[selector].name;
43 static int pxa3xx_get_group_pins(
struct pinctrl_dev *pctrldev,
45 const unsigned **
pins,
50 *pins = info->
grps[selector].pins;
51 *num_pins = info->
grps[selector].npins;
55 static struct pinctrl_ops pxa3xx_pctrl_ops = {
56 .get_groups_count = pxa3xx_get_groups_count,
57 .get_group_name = pxa3xx_get_group_name,
58 .get_group_pins = pxa3xx_get_group_pins,
61 static int pxa3xx_pmx_get_funcs_count(
struct pinctrl_dev *pctrldev)
68 static const char *pxa3xx_pmx_get_func_name(
struct pinctrl_dev *pctrldev,
75 static int pxa3xx_pmx_get_groups(
struct pinctrl_dev *pctrldev,
unsigned func,
76 const char *
const **groups,
77 unsigned *
const num_groups)
81 *num_groups = info->
funcs[
func].num_groups;
90 if (mfp->
func[i] == mux)
93 if (i >= PXA3xx_MAX_MUX)
104 for (i = 0; i < grp->
npins; i++) {
106 ret = match_mux(&info->
mfp[pin], mux);
108 dev_err(info->
dev,
"Can't find mux %d on pin%d\n",
116 static int pxa3xx_pmx_enable(
struct pinctrl_dev *pctrldev,
unsigned func,
122 int i, mfpr,
pin, pin_func;
124 if (!pin_grp->
npins ||
125 (match_group_mux(pin_grp, info, pin_grp->
mux) < 0)) {
126 dev_err(info->
dev,
"Failed to set the pin group: %d\n", group);
129 for (i = 0; i < pin_grp->
npins; i++) {
130 pin = pin_grp->
pins[
i];
131 pin_func = match_mux(&info->
mfp[pin], pin_grp->
mux);
132 mfpr = info->
mfp[
pin].mfpr;
136 writel_relaxed(data, info->
virt_base + mfpr);
141 static int pxa3xx_pmx_request_gpio(
struct pinctrl_dev *pctrldev,
142 struct pinctrl_gpio_range *
range,
151 dev_err(info->
dev,
"No GPIO function on pin%d (%s)\n",
152 pin, info->
pads[pin].name);
155 mfpr = info->
mfp[
pin].mfpr;
159 writel_relaxed(data, info->
virt_base + mfpr);
163 static struct pinmux_ops pxa3xx_pmx_ops = {
164 .get_functions_count = pxa3xx_pmx_get_funcs_count,
165 .get_function_name = pxa3xx_pmx_get_func_name,
166 .get_function_groups = pxa3xx_pmx_get_groups,
167 .enable = pxa3xx_pmx_enable,
168 .gpio_request_enable = pxa3xx_pmx_request_gpio,
174 struct pinctrl_desc *
desc;
181 desc->pins = info->
pads;
183 desc->pctlops = &pxa3xx_pctrl_ops;
184 desc->pmxops = &pxa3xx_pmx_ops;
186 pxa3xx_pinctrl_gpio_range.npins = info->
num_gpio;
192 info->
phy_size = resource_size(res);
198 dev_err(&pdev->
dev,
"failed to register PXA pinmux driver\n");
203 platform_set_drvdata(pdev, info);
216 platform_set_drvdata(pdev,
NULL);
220 static int __init pxa3xx_pinctrl_init(
void)
222 pr_info(
"pxa3xx-pinctrl: PXA3xx pinctrl driver initializing\n");
227 static void __exit pxa3xx_pinctrl_exit(
void)