mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
pinctrl: assume map table entries can't have a NULL name field
pinctrl_register_mappings() already requires that every mapping table entry have a non-NULL name field. Logically, this makes sense too; drivers should always request a specific named state so they know what they're getting. Relying on getting the first mentioned state in the mapping table is error-prone, and a nasty special case to implement, given that a given the mapping table may define multiple states for a device. Remove a small part of the documentation that talked about optionally requesting a specific state; it's mandatory now. Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Dong Aisheng <dong.aisheng@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
46919ae63d
commit
110e4ec5a1
@ -782,16 +782,19 @@ spi on the second function mapping:
|
|||||||
static const struct pinctrl_map __initdata mapping[] = {
|
static const struct pinctrl_map __initdata mapping[] = {
|
||||||
{
|
{
|
||||||
.dev_name = "foo-spi.0",
|
.dev_name = "foo-spi.0",
|
||||||
|
.name = PINCTRL_STATE_DEFAULT,
|
||||||
.ctrl_dev_name = "pinctrl-foo",
|
.ctrl_dev_name = "pinctrl-foo",
|
||||||
.function = "spi0",
|
.function = "spi0",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.dev_name = "foo-i2c.0",
|
.dev_name = "foo-i2c.0",
|
||||||
|
.name = PINCTRL_STATE_DEFAULT,
|
||||||
.ctrl_dev_name = "pinctrl-foo",
|
.ctrl_dev_name = "pinctrl-foo",
|
||||||
.function = "i2c0",
|
.function = "i2c0",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.dev_name = "foo-mmc.0",
|
.dev_name = "foo-mmc.0",
|
||||||
|
.name = PINCTRL_STATE_DEFAULT,
|
||||||
.ctrl_dev_name = "pinctrl-foo",
|
.ctrl_dev_name = "pinctrl-foo",
|
||||||
.function = "mmc0",
|
.function = "mmc0",
|
||||||
},
|
},
|
||||||
@ -944,10 +947,6 @@ foo_remove()
|
|||||||
pinctrl_put(state->p);
|
pinctrl_put(state->p);
|
||||||
}
|
}
|
||||||
|
|
||||||
If you want to grab a specific control mapping and not just the first one
|
|
||||||
found for this device you can specify a specific mapping name, for example in
|
|
||||||
the above example the second i2c0 setting: pinctrl_get(&device, "spi0-pos-B");
|
|
||||||
|
|
||||||
This get/enable/disable/put sequence can just as well be handled by bus drivers
|
This get/enable/disable/put sequence can just as well be handled by bus drivers
|
||||||
if you don't want each and every driver to handle it and you know the
|
if you don't want each and every driver to handle it and you know the
|
||||||
arrangement on your bus.
|
arrangement on your bus.
|
||||||
|
@ -1612,9 +1612,9 @@ static struct pinctrl_map __initdata u300_pinmux_map[] = {
|
|||||||
PIN_MAP_SYS_HOG("pinctrl-u300", "emif0"),
|
PIN_MAP_SYS_HOG("pinctrl-u300", "emif0"),
|
||||||
PIN_MAP_SYS_HOG("pinctrl-u300", "emif1"),
|
PIN_MAP_SYS_HOG("pinctrl-u300", "emif1"),
|
||||||
/* per-device maps for MMC/SD, SPI and UART */
|
/* per-device maps for MMC/SD, SPI and UART */
|
||||||
PIN_MAP("MMCSD", "pinctrl-u300", "mmc0", "mmci"),
|
PIN_MAP(PINCTRL_STATE_DEFAULT, "pinctrl-u300", "mmc0", "mmci"),
|
||||||
PIN_MAP("SPI", "pinctrl-u300", "spi0", "pl022"),
|
PIN_MAP(PINCTRL_STATE_DEFAULT, "pinctrl-u300", "spi0", "pl022"),
|
||||||
PIN_MAP("UART0", "pinctrl-u300", "uart0", "uart0"),
|
PIN_MAP(PINCTRL_STATE_DEFAULT, "pinctrl-u300", "uart0", "uart0"),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct u300_mux_hog {
|
struct u300_mux_hog {
|
||||||
@ -1646,7 +1646,7 @@ static int __init u300_pinctrl_fetch(void)
|
|||||||
struct pinctrl *p;
|
struct pinctrl *p;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
p = pinctrl_get(u300_mux_hogs[i].dev, NULL);
|
p = pinctrl_get(u300_mux_hogs[i].dev, PINCTRL_STATE_DEFAULT);
|
||||||
if (IS_ERR(p)) {
|
if (IS_ERR(p)) {
|
||||||
pr_err("u300: could not get pinmux hog %s\n",
|
pr_err("u300: could not get pinmux hog %s\n",
|
||||||
u300_mux_hogs[i].name);
|
u300_mux_hogs[i].name);
|
||||||
|
@ -461,8 +461,8 @@ static struct pinctrl *pinctrl_get_locked(struct device *dev, const char *name)
|
|||||||
int i;
|
int i;
|
||||||
struct pinctrl_map const *map;
|
struct pinctrl_map const *map;
|
||||||
|
|
||||||
/* We must have a dev name */
|
/* We must have both a dev and state name */
|
||||||
if (WARN_ON(!dev))
|
if (WARN_ON(!dev || !name))
|
||||||
return ERR_PTR(-EINVAL);
|
return ERR_PTR(-EINVAL);
|
||||||
|
|
||||||
devname = dev_name(dev);
|
devname = dev_name(dev);
|
||||||
@ -504,16 +504,9 @@ static struct pinctrl *pinctrl_get_locked(struct device *dev, const char *name)
|
|||||||
if (strcmp(map->dev_name, devname))
|
if (strcmp(map->dev_name, devname))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/*
|
/* State name must be the one we're looking for */
|
||||||
* If we're looking for a specific named map, this must match,
|
if (strcmp(map->name, name))
|
||||||
* else we loop and look for the next.
|
continue;
|
||||||
*/
|
|
||||||
if (name != NULL) {
|
|
||||||
if (map->name == NULL)
|
|
||||||
continue;
|
|
||||||
if (strcmp(map->name, name))
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = pinmux_apply_muxmap(pctldev, p, dev, devname, map);
|
ret = pinmux_apply_muxmap(pctldev, p, dev, devname, map);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -673,7 +673,7 @@ int sirfsoc_uart_probe(struct platform_device *pdev)
|
|||||||
port->irq = res->start;
|
port->irq = res->start;
|
||||||
|
|
||||||
if (sirfport->hw_flow_ctrl) {
|
if (sirfport->hw_flow_ctrl) {
|
||||||
sirfport->p = pinctrl_get(&pdev->dev, NULL);
|
sirfport->p = pinctrl_get(&pdev->dev, PINCTRL_STATE_DEFAULT);
|
||||||
ret = IS_ERR(sirfport->p);
|
ret = IS_ERR(sirfport->p);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto pin_err;
|
goto pin_err;
|
||||||
|
Loading…
Reference in New Issue
Block a user