mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-21 00:42:16 +00:00
pinctrl: u300-pinmux: register proper GPIO ranges
This register the actual GPIO ranges used by the COH901XXX GPIO driver. Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
ca402d37dc
commit
f812f0f53e
@ -1019,15 +1019,29 @@ static struct pinmux_ops u300_pmx_ops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FIXME: this will be set to sane values as this driver engulfs
|
* GPIO ranges handled by the application-side COH901XXX GPIO controller
|
||||||
* drivers/gpio/gpio-u300.c and we really know this stuff.
|
* Very many pins can be converted into GPIO pins, but we only list those
|
||||||
|
* that are useful in practice to cut down on tables.
|
||||||
*/
|
*/
|
||||||
static struct pinctrl_gpio_range u300_gpio_range = {
|
#define U300_GPIO_RANGE(a, b, c) { .name = "COH901XXX", .id = a, .base= a, \
|
||||||
.name = "COH901*",
|
.pin_base = b, .npins = c }
|
||||||
.id = 0,
|
|
||||||
.base = 0,
|
static struct pinctrl_gpio_range u300_gpio_ranges[] = {
|
||||||
.pin_base = 0,
|
U300_GPIO_RANGE(10, 426, 1),
|
||||||
.npins = 64,
|
U300_GPIO_RANGE(11, 180, 1),
|
||||||
|
U300_GPIO_RANGE(12, 165, 1), /* MS/MMC card insertion */
|
||||||
|
U300_GPIO_RANGE(13, 179, 1),
|
||||||
|
U300_GPIO_RANGE(14, 178, 1),
|
||||||
|
U300_GPIO_RANGE(16, 194, 1),
|
||||||
|
U300_GPIO_RANGE(17, 193, 1),
|
||||||
|
U300_GPIO_RANGE(18, 192, 1),
|
||||||
|
U300_GPIO_RANGE(19, 191, 1),
|
||||||
|
U300_GPIO_RANGE(20, 186, 1),
|
||||||
|
U300_GPIO_RANGE(21, 185, 1),
|
||||||
|
U300_GPIO_RANGE(22, 184, 1),
|
||||||
|
U300_GPIO_RANGE(23, 183, 1),
|
||||||
|
U300_GPIO_RANGE(24, 182, 1),
|
||||||
|
U300_GPIO_RANGE(25, 181, 1),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pinctrl_desc u300_pmx_desc = {
|
static struct pinctrl_desc u300_pmx_desc = {
|
||||||
@ -1042,9 +1056,10 @@ static struct pinctrl_desc u300_pmx_desc = {
|
|||||||
|
|
||||||
static int __init u300_pmx_probe(struct platform_device *pdev)
|
static int __init u300_pmx_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
struct u300_pmx *upmx;
|
struct u300_pmx *upmx;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
int ret;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* Create state holders etc for this driver */
|
/* Create state holders etc for this driver */
|
||||||
upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL);
|
upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL);
|
||||||
@ -1081,7 +1096,8 @@ static int __init u300_pmx_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* We will handle a range of GPIO pins */
|
/* We will handle a range of GPIO pins */
|
||||||
pinctrl_add_gpio_range(upmx->pctl, &u300_gpio_range);
|
for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++)
|
||||||
|
pinctrl_add_gpio_range(upmx->pctl, &u300_gpio_ranges[i]);
|
||||||
|
|
||||||
platform_set_drvdata(pdev, upmx);
|
platform_set_drvdata(pdev, upmx);
|
||||||
|
|
||||||
@ -1103,8 +1119,10 @@ out_no_resource:
|
|||||||
static int __exit u300_pmx_remove(struct platform_device *pdev)
|
static int __exit u300_pmx_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct u300_pmx *upmx = platform_get_drvdata(pdev);
|
struct u300_pmx *upmx = platform_get_drvdata(pdev);
|
||||||
|
int i;
|
||||||
|
|
||||||
pinctrl_remove_gpio_range(upmx->pctl, &u300_gpio_range);
|
for (i = 0; i < ARRAY_SIZE(u300_gpio_ranges); i++)
|
||||||
|
pinctrl_remove_gpio_range(upmx->pctl, &u300_gpio_ranges[i]);
|
||||||
pinctrl_unregister(upmx->pctl);
|
pinctrl_unregister(upmx->pctl);
|
||||||
iounmap(upmx->virtbase);
|
iounmap(upmx->virtbase);
|
||||||
release_mem_region(upmx->phybase, upmx->physize);
|
release_mem_region(upmx->phybase, upmx->physize);
|
||||||
|
Loading…
Reference in New Issue
Block a user