Commit 2563606c authored by Linus Walleij's avatar Linus Walleij

Merge tag 'gpiod-flags-for-4.3' of git://git.pengutronix.de/git/ukl/linux into devel

The last patch in this series makes the flags parameter for the various
gpiod_get* functions mandatory and so allows to remove an ugly cpp hack
introduced in commit 39b2bbe3 (gpio: add flags argument to gpiod_get*()
functions) for v3.17-rc1.

The other nine commits fix the last remaining users of these functions that
don't pass flags yet. (Only etraxfs-uart wasn't fixed; this driver's use of the
gpiod functions needs fixing anyhow.)
parents 01540314 b17d1bf1
...@@ -59,13 +59,13 @@ static int devm_gpiod_match_array(struct device *dev, void *res, void *data) ...@@ -59,13 +59,13 @@ static int devm_gpiod_match_array(struct device *dev, void *res, void *data)
* automatically disposed on driver detach. See gpiod_get() for detailed * automatically disposed on driver detach. See gpiod_get() for detailed
* information about behavior and return values. * information about behavior and return values.
*/ */
struct gpio_desc *__must_check __devm_gpiod_get(struct device *dev, struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return devm_gpiod_get_index(dev, con_id, 0, flags); return devm_gpiod_get_index(dev, con_id, 0, flags);
} }
EXPORT_SYMBOL(__devm_gpiod_get); EXPORT_SYMBOL(devm_gpiod_get);
/** /**
* devm_gpiod_get_optional - Resource-managed gpiod_get_optional() * devm_gpiod_get_optional - Resource-managed gpiod_get_optional()
...@@ -77,13 +77,13 @@ EXPORT_SYMBOL(__devm_gpiod_get); ...@@ -77,13 +77,13 @@ EXPORT_SYMBOL(__devm_gpiod_get);
* are automatically disposed on driver detach. See gpiod_get_optional() for * are automatically disposed on driver detach. See gpiod_get_optional() for
* detailed information about behavior and return values. * detailed information about behavior and return values.
*/ */
struct gpio_desc *__must_check __devm_gpiod_get_optional(struct device *dev, struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return devm_gpiod_get_index_optional(dev, con_id, 0, flags); return devm_gpiod_get_index_optional(dev, con_id, 0, flags);
} }
EXPORT_SYMBOL(__devm_gpiod_get_optional); EXPORT_SYMBOL(devm_gpiod_get_optional);
/** /**
* devm_gpiod_get_index - Resource-managed gpiod_get_index() * devm_gpiod_get_index - Resource-managed gpiod_get_index()
...@@ -96,7 +96,7 @@ EXPORT_SYMBOL(__devm_gpiod_get_optional); ...@@ -96,7 +96,7 @@ EXPORT_SYMBOL(__devm_gpiod_get_optional);
* automatically disposed on driver detach. See gpiod_get_index() for detailed * automatically disposed on driver detach. See gpiod_get_index() for detailed
* information about behavior and return values. * information about behavior and return values.
*/ */
struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev, struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags) enum gpiod_flags flags)
...@@ -120,7 +120,7 @@ struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev, ...@@ -120,7 +120,7 @@ struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev,
return desc; return desc;
} }
EXPORT_SYMBOL(__devm_gpiod_get_index); EXPORT_SYMBOL(devm_gpiod_get_index);
/** /**
* devm_get_gpiod_from_child - get a GPIO descriptor from a device's child node * devm_get_gpiod_from_child - get a GPIO descriptor from a device's child node
...@@ -182,10 +182,10 @@ EXPORT_SYMBOL(devm_get_gpiod_from_child); ...@@ -182,10 +182,10 @@ EXPORT_SYMBOL(devm_get_gpiod_from_child);
* gpiod_get_index_optional() for detailed information about behavior and * gpiod_get_index_optional() for detailed information about behavior and
* return values. * return values.
*/ */
struct gpio_desc *__must_check __devm_gpiod_get_index_optional(struct device *dev, struct gpio_desc *__must_check devm_gpiod_get_index_optional(struct device *dev,
const char *con_id, const char *con_id,
unsigned int index, unsigned int index,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
struct gpio_desc *desc; struct gpio_desc *desc;
...@@ -197,7 +197,7 @@ struct gpio_desc *__must_check __devm_gpiod_get_index_optional(struct device *de ...@@ -197,7 +197,7 @@ struct gpio_desc *__must_check __devm_gpiod_get_index_optional(struct device *de
return desc; return desc;
} }
EXPORT_SYMBOL(__devm_gpiod_get_index_optional); EXPORT_SYMBOL(devm_gpiod_get_index_optional);
/** /**
* devm_gpiod_get_array - Resource-managed gpiod_get_array() * devm_gpiod_get_array - Resource-managed gpiod_get_array()
......
...@@ -1902,12 +1902,12 @@ EXPORT_SYMBOL_GPL(gpiod_count); ...@@ -1902,12 +1902,12 @@ EXPORT_SYMBOL_GPL(gpiod_count);
* dev, -ENOENT if no GPIO has been assigned to the requested function, or * dev, -ENOENT if no GPIO has been assigned to the requested function, or
* another IS_ERR() code if an error occurred while trying to acquire the GPIO. * another IS_ERR() code if an error occurred while trying to acquire the GPIO.
*/ */
struct gpio_desc *__must_check __gpiod_get(struct device *dev, const char *con_id, struct gpio_desc *__must_check gpiod_get(struct device *dev, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return gpiod_get_index(dev, con_id, 0, flags); return gpiod_get_index(dev, con_id, 0, flags);
} }
EXPORT_SYMBOL_GPL(__gpiod_get); EXPORT_SYMBOL_GPL(gpiod_get);
/** /**
* gpiod_get_optional - obtain an optional GPIO for a given GPIO function * gpiod_get_optional - obtain an optional GPIO for a given GPIO function
...@@ -1919,13 +1919,13 @@ EXPORT_SYMBOL_GPL(__gpiod_get); ...@@ -1919,13 +1919,13 @@ EXPORT_SYMBOL_GPL(__gpiod_get);
* the requested function it will return NULL. This is convenient for drivers * the requested function it will return NULL. This is convenient for drivers
* that need to handle optional GPIOs. * that need to handle optional GPIOs.
*/ */
struct gpio_desc *__must_check __gpiod_get_optional(struct device *dev, struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return gpiod_get_index_optional(dev, con_id, 0, flags); return gpiod_get_index_optional(dev, con_id, 0, flags);
} }
EXPORT_SYMBOL_GPL(__gpiod_get_optional); EXPORT_SYMBOL_GPL(gpiod_get_optional);
/** /**
...@@ -1982,7 +1982,7 @@ static int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id, ...@@ -1982,7 +1982,7 @@ static int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id,
* requested function and/or index, or another IS_ERR() code if an error * requested function and/or index, or another IS_ERR() code if an error
* occurred while trying to acquire the GPIO. * occurred while trying to acquire the GPIO.
*/ */
struct gpio_desc *__must_check __gpiod_get_index(struct device *dev, struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags) enum gpiod_flags flags)
...@@ -2031,7 +2031,7 @@ struct gpio_desc *__must_check __gpiod_get_index(struct device *dev, ...@@ -2031,7 +2031,7 @@ struct gpio_desc *__must_check __gpiod_get_index(struct device *dev,
return desc; return desc;
} }
EXPORT_SYMBOL_GPL(__gpiod_get_index); EXPORT_SYMBOL_GPL(gpiod_get_index);
/** /**
* fwnode_get_named_gpiod - obtain a GPIO from firmware node * fwnode_get_named_gpiod - obtain a GPIO from firmware node
...@@ -2100,7 +2100,7 @@ EXPORT_SYMBOL_GPL(fwnode_get_named_gpiod); ...@@ -2100,7 +2100,7 @@ EXPORT_SYMBOL_GPL(fwnode_get_named_gpiod);
* specified index was assigned to the requested function it will return NULL. * specified index was assigned to the requested function it will return NULL.
* This is convenient for drivers that need to handle optional GPIOs. * This is convenient for drivers that need to handle optional GPIOs.
*/ */
struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev, struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
const char *con_id, const char *con_id,
unsigned int index, unsigned int index,
enum gpiod_flags flags) enum gpiod_flags flags)
...@@ -2115,7 +2115,7 @@ struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev, ...@@ -2115,7 +2115,7 @@ struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev,
return desc; return desc;
} }
EXPORT_SYMBOL_GPL(__gpiod_get_index_optional); EXPORT_SYMBOL_GPL(gpiod_get_index_optional);
/** /**
* gpiod_hog - Hog the specified GPIO desc given the provided flags * gpiod_hog - Hog the specified GPIO desc given the provided flags
......
...@@ -373,7 +373,7 @@ static int edp_gpio_config(struct edp_ctrl *ctrl) ...@@ -373,7 +373,7 @@ static int edp_gpio_config(struct edp_ctrl *ctrl)
struct device *dev = &ctrl->pdev->dev; struct device *dev = &ctrl->pdev->dev;
int ret; int ret;
ctrl->panel_hpd_gpio = devm_gpiod_get(dev, "panel-hpd"); ctrl->panel_hpd_gpio = devm_gpiod_get(dev, "panel-hpd", GPIOD_IN);
if (IS_ERR(ctrl->panel_hpd_gpio)) { if (IS_ERR(ctrl->panel_hpd_gpio)) {
ret = PTR_ERR(ctrl->panel_hpd_gpio); ret = PTR_ERR(ctrl->panel_hpd_gpio);
ctrl->panel_hpd_gpio = NULL; ctrl->panel_hpd_gpio = NULL;
...@@ -381,13 +381,7 @@ static int edp_gpio_config(struct edp_ctrl *ctrl) ...@@ -381,13 +381,7 @@ static int edp_gpio_config(struct edp_ctrl *ctrl)
return ret; return ret;
} }
ret = gpiod_direction_input(ctrl->panel_hpd_gpio); ctrl->panel_en_gpio = devm_gpiod_get(dev, "panel-en", GPIOD_OUT_LOW);
if (ret) {
pr_err("%s: Set direction for hpd failed, %d\n", __func__, ret);
return ret;
}
ctrl->panel_en_gpio = devm_gpiod_get(dev, "panel-en");
if (IS_ERR(ctrl->panel_en_gpio)) { if (IS_ERR(ctrl->panel_en_gpio)) {
ret = PTR_ERR(ctrl->panel_en_gpio); ret = PTR_ERR(ctrl->panel_en_gpio);
ctrl->panel_en_gpio = NULL; ctrl->panel_en_gpio = NULL;
...@@ -395,13 +389,6 @@ static int edp_gpio_config(struct edp_ctrl *ctrl) ...@@ -395,13 +389,6 @@ static int edp_gpio_config(struct edp_ctrl *ctrl)
return ret; return ret;
} }
ret = gpiod_direction_output(ctrl->panel_en_gpio, 0);
if (ret) {
pr_err("%s: Set direction for panel_en failed, %d\n",
__func__, ret);
return ret;
}
DBG("gpio on"); DBG("gpio on");
return 0; return 0;
......
...@@ -375,25 +375,17 @@ static int panel_probe(struct platform_device *pdev) ...@@ -375,25 +375,17 @@ static int panel_probe(struct platform_device *pdev)
dev_info(&pdev->dev, "found backlight\n"); dev_info(&pdev->dev, "found backlight\n");
} }
panel_mod->enable_gpio = devm_gpiod_get(&pdev->dev, "enable"); panel_mod->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable",
GPIOD_OUT_LOW);
if (IS_ERR(panel_mod->enable_gpio)) { if (IS_ERR(panel_mod->enable_gpio)) {
ret = PTR_ERR(panel_mod->enable_gpio); ret = PTR_ERR(panel_mod->enable_gpio);
if (ret != -ENOENT) { dev_err(&pdev->dev, "failed to request enable GPIO\n");
dev_err(&pdev->dev, "failed to request enable GPIO\n"); goto fail_backlight;
goto fail_backlight;
}
/* Optional GPIO is not here, continue silently. */
panel_mod->enable_gpio = NULL;
} else {
ret = gpiod_direction_output(panel_mod->enable_gpio, 0);
if (ret < 0) {
dev_err(&pdev->dev, "failed to setup GPIO\n");
goto fail_backlight;
}
dev_info(&pdev->dev, "found enable GPIO\n");
} }
if (panel_mod->enable_gpio)
dev_info(&pdev->dev, "found enable GPIO\n");
mod = &panel_mod->base; mod = &panel_mod->base;
pdev->dev.platform_data = mod; pdev->dev.platform_data = mod;
......
...@@ -488,16 +488,12 @@ static int stk3310_gpio_probe(struct i2c_client *client) ...@@ -488,16 +488,12 @@ static int stk3310_gpio_probe(struct i2c_client *client)
dev = &client->dev; dev = &client->dev;
/* gpio interrupt pin */ /* gpio interrupt pin */
gpio = devm_gpiod_get_index(dev, STK3310_GPIO, 0); gpio = devm_gpiod_get_index(dev, STK3310_GPIO, 0, GPIOD_IN);
if (IS_ERR(gpio)) { if (IS_ERR(gpio)) {
dev_err(dev, "acpi gpio get index failed\n"); dev_err(dev, "acpi gpio get index failed\n");
return PTR_ERR(gpio); return PTR_ERR(gpio);
} }
ret = gpiod_direction_input(gpio);
if (ret)
return ret;
ret = gpiod_to_irq(gpio); ret = gpiod_to_irq(gpio);
dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret); dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret);
......
...@@ -839,16 +839,12 @@ static int bmc150_magn_gpio_probe(struct i2c_client *client) ...@@ -839,16 +839,12 @@ static int bmc150_magn_gpio_probe(struct i2c_client *client)
dev = &client->dev; dev = &client->dev;
/* data ready GPIO interrupt pin */ /* data ready GPIO interrupt pin */
gpio = devm_gpiod_get_index(dev, BMC150_MAGN_GPIO_INT, 0); gpio = devm_gpiod_get_index(dev, BMC150_MAGN_GPIO_INT, 0, GPIOD_IN);
if (IS_ERR(gpio)) { if (IS_ERR(gpio)) {
dev_err(dev, "ACPI GPIO get index failed\n"); dev_err(dev, "ACPI GPIO get index failed\n");
return PTR_ERR(gpio); return PTR_ERR(gpio);
} }
ret = gpiod_direction_input(gpio);
if (ret)
return ret;
ret = gpiod_to_irq(gpio); ret = gpiod_to_irq(gpio);
dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret); dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret);
......
...@@ -465,7 +465,7 @@ static int adp1653_of_init(struct i2c_client *client, ...@@ -465,7 +465,7 @@ static int adp1653_of_init(struct i2c_client *client,
of_node_put(child); of_node_put(child);
pd->enable_gpio = devm_gpiod_get(&client->dev, "enable"); pd->enable_gpio = devm_gpiod_get(&client->dev, "enable", GPIOD_OUT_LOW);
if (!pd->enable_gpio) { if (!pd->enable_gpio) {
dev_err(&client->dev, "Error getting GPIO\n"); dev_err(&client->dev, "Error getting GPIO\n");
return -EINVAL; return -EINVAL;
......
...@@ -318,19 +318,15 @@ static int nxp_nci_i2c_acpi_config(struct nxp_nci_i2c_phy *phy) ...@@ -318,19 +318,15 @@ static int nxp_nci_i2c_acpi_config(struct nxp_nci_i2c_phy *phy)
struct i2c_client *client = phy->i2c_dev; struct i2c_client *client = phy->i2c_dev;
struct gpio_desc *gpiod_en, *gpiod_fw, *gpiod_irq; struct gpio_desc *gpiod_en, *gpiod_fw, *gpiod_irq;
gpiod_en = devm_gpiod_get_index(&client->dev, NULL, 2); gpiod_en = devm_gpiod_get_index(&client->dev, NULL, 2, GPIOD_OUT_LOW);
gpiod_fw = devm_gpiod_get_index(&client->dev, NULL, 1); gpiod_fw = devm_gpiod_get_index(&client->dev, NULL, 1, GPIOD_OUT_LOW);
gpiod_irq = devm_gpiod_get_index(&client->dev, NULL, 0); gpiod_irq = devm_gpiod_get_index(&client->dev, NULL, 0, GPIOD_IN);
if (IS_ERR(gpiod_en) || IS_ERR(gpiod_fw) || IS_ERR(gpiod_irq)) { if (IS_ERR(gpiod_en) || IS_ERR(gpiod_fw) || IS_ERR(gpiod_irq)) {
nfc_err(&client->dev, "No GPIOs\n"); nfc_err(&client->dev, "No GPIOs\n");
return -EINVAL; return -EINVAL;
} }
gpiod_direction_output(gpiod_en, 0);
gpiod_direction_output(gpiod_fw, 0);
gpiod_direction_input(gpiod_irq);
client->irq = gpiod_to_irq(gpiod_irq); client->irq = gpiod_to_irq(gpiod_irq);
if (client->irq < 0) { if (client->irq < 0) {
nfc_err(&client->dev, "No IRQ\n"); nfc_err(&client->dev, "No IRQ\n");
......
...@@ -61,32 +61,26 @@ static struct phy_ops phy_ops = { ...@@ -61,32 +61,26 @@ static struct phy_ops phy_ops = {
static int tusb1210_probe(struct ulpi *ulpi) static int tusb1210_probe(struct ulpi *ulpi)
{ {
struct gpio_desc *gpio;
struct tusb1210 *tusb; struct tusb1210 *tusb;
u8 val, reg; u8 val, reg;
int ret;
tusb = devm_kzalloc(&ulpi->dev, sizeof(*tusb), GFP_KERNEL); tusb = devm_kzalloc(&ulpi->dev, sizeof(*tusb), GFP_KERNEL);
if (!tusb) if (!tusb)
return -ENOMEM; return -ENOMEM;
gpio = devm_gpiod_get(&ulpi->dev, "reset"); tusb->gpio_reset = devm_gpiod_get_optional(&ulpi->dev, "reset",
if (!IS_ERR(gpio)) { GPIOD_OUT_LOW);
ret = gpiod_direction_output(gpio, 0); if (IS_ERR(tusb->gpio_reset))
if (ret) return PTR_ERR(tusb->gpio_reset);
return ret;
gpiod_set_value_cansleep(gpio, 1);
tusb->gpio_reset = gpio;
}
gpio = devm_gpiod_get(&ulpi->dev, "cs"); gpiod_set_value_cansleep(tusb->gpio_reset, 1);
if (!IS_ERR(gpio)) {
ret = gpiod_direction_output(gpio, 0); tusb->gpio_cs = devm_gpiod_get_optional(&ulpi->dev, "cs",
if (ret) GPIOD_OUT_LOW);
return ret; if (IS_ERR(tusb->gpio_cs))
gpiod_set_value_cansleep(gpio, 1); return PTR_ERR(tusb->gpio_cs);
tusb->gpio_cs = gpio;
} gpiod_set_value_cansleep(tusb->gpio_cs, 1);
/* /*
* VENDOR_SPECIFIC2 register in TUSB1210 can be used for configuring eye * VENDOR_SPECIFIC2 register in TUSB1210 can be used for configuring eye
......
...@@ -83,17 +83,23 @@ static int dwc3_pci_quirks(struct pci_dev *pdev) ...@@ -83,17 +83,23 @@ static int dwc3_pci_quirks(struct pci_dev *pdev)
acpi_dev_add_driver_gpios(ACPI_COMPANION(&pdev->dev), acpi_dev_add_driver_gpios(ACPI_COMPANION(&pdev->dev),
acpi_dwc3_byt_gpios); acpi_dwc3_byt_gpios);
/* These GPIOs will turn on the USB2 PHY */ /*
gpio = gpiod_get(&pdev->dev, "cs"); * These GPIOs will turn on the USB2 PHY. Note that we have to
if (!IS_ERR(gpio)) { * put the gpio descriptors again here because the phy driver
gpiod_direction_output(gpio, 0); * might want to grab them, too.
gpiod_set_value_cansleep(gpio, 1); */
gpiod_put(gpio); gpio = gpiod_get_optional(&pdev->dev, "cs", GPIOD_OUT_LOW);
} if (IS_ERR(gpio))
return PTR_ERR(gpio);
gpiod_set_value_cansleep(gpio, 1);
gpiod_put(gpio);
gpio = gpiod_get_optional(&pdev->dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(gpio))
return PTR_ERR(gpio);
gpio = gpiod_get(&pdev->dev, "reset"); if (gpio) {
if (!IS_ERR(gpio)) {
gpiod_direction_output(gpio, 0);
gpiod_set_value_cansleep(gpio, 1); gpiod_set_value_cansleep(gpio, 1);
gpiod_put(gpio); gpiod_put(gpio);
usleep_range(10000, 11000); usleep_range(10000, 11000);
......
...@@ -2422,7 +2422,7 @@ static int pxa_udc_probe(struct platform_device *pdev) ...@@ -2422,7 +2422,7 @@ static int pxa_udc_probe(struct platform_device *pdev)
} }
udc->udc_command = mach->udc_command; udc->udc_command = mach->udc_command;
} else { } else {
udc->gpiod = devm_gpiod_get(&pdev->dev, NULL); udc->gpiod = devm_gpiod_get(&pdev->dev, NULL, GPIOD_ASIS);
} }
regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
......
...@@ -218,11 +218,13 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop, ...@@ -218,11 +218,13 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop,
clk_rate = 0; clk_rate = 0;
needs_vcc = of_property_read_bool(node, "vcc-supply"); needs_vcc = of_property_read_bool(node, "vcc-supply");
nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset"); nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset",
GPIOD_ASIS);
err = PTR_ERR_OR_ZERO(nop->gpiod_reset); err = PTR_ERR_OR_ZERO(nop->gpiod_reset);
if (!err) { if (!err) {
nop->gpiod_vbus = devm_gpiod_get_optional(dev, nop->gpiod_vbus = devm_gpiod_get_optional(dev,
"vbus-detect"); "vbus-detect",
GPIOD_ASIS);
err = PTR_ERR_OR_ZERO(nop->gpiod_vbus); err = PTR_ERR_OR_ZERO(nop->gpiod_vbus);
} }
} else if (pdata) { } else if (pdata) {
......
...@@ -47,17 +47,17 @@ enum gpiod_flags { ...@@ -47,17 +47,17 @@ enum gpiod_flags {
int gpiod_count(struct device *dev, const char *con_id); int gpiod_count(struct device *dev, const char *con_id);
/* Acquire and dispose GPIOs */ /* Acquire and dispose GPIOs */
struct gpio_desc *__must_check __gpiod_get(struct device *dev, struct gpio_desc *__must_check gpiod_get(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
struct gpio_desc *__must_check __gpiod_get_index(struct device *dev, struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags); enum gpiod_flags flags);
struct gpio_desc *__must_check __gpiod_get_optional(struct device *dev, struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev, struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
const char *con_id, const char *con_id,
unsigned int index, unsigned int index,
enum gpiod_flags flags); enum gpiod_flags flags);
...@@ -70,18 +70,18 @@ struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev, ...@@ -70,18 +70,18 @@ struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
void gpiod_put(struct gpio_desc *desc); void gpiod_put(struct gpio_desc *desc);
void gpiod_put_array(struct gpio_descs *descs); void gpiod_put_array(struct gpio_descs *descs);
struct gpio_desc *__must_check __devm_gpiod_get(struct device *dev, struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev, struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags); enum gpiod_flags flags);
struct gpio_desc *__must_check __devm_gpiod_get_optional(struct device *dev, struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
struct gpio_desc *__must_check struct gpio_desc *__must_check
__devm_gpiod_get_index_optional(struct device *dev, const char *con_id, devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
unsigned int index, enum gpiod_flags flags); unsigned int index, enum gpiod_flags flags);
struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev, struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
const char *con_id, const char *con_id,
...@@ -146,31 +146,31 @@ static inline int gpiod_count(struct device *dev, const char *con_id) ...@@ -146,31 +146,31 @@ static inline int gpiod_count(struct device *dev, const char *con_id)
return 0; return 0;
} }
static inline struct gpio_desc *__must_check __gpiod_get(struct device *dev, static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
__gpiod_get_index(struct device *dev, gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
__gpiod_get_optional(struct device *dev, const char *con_id, gpiod_get_optional(struct device *dev, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
__gpiod_get_index_optional(struct device *dev, const char *con_id, gpiod_get_index_optional(struct device *dev, const char *con_id,
unsigned int index, enum gpiod_flags flags) unsigned int index, enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
...@@ -206,7 +206,7 @@ static inline void gpiod_put_array(struct gpio_descs *descs) ...@@ -206,7 +206,7 @@ static inline void gpiod_put_array(struct gpio_descs *descs)
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
__devm_gpiod_get(struct device *dev, devm_gpiod_get(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
...@@ -214,7 +214,7 @@ __devm_gpiod_get(struct device *dev, ...@@ -214,7 +214,7 @@ __devm_gpiod_get(struct device *dev,
} }
static inline static inline
struct gpio_desc *__must_check struct gpio_desc *__must_check
__devm_gpiod_get_index(struct device *dev, devm_gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags) enum gpiod_flags flags)
...@@ -223,14 +223,14 @@ __devm_gpiod_get_index(struct device *dev, ...@@ -223,14 +223,14 @@ __devm_gpiod_get_index(struct device *dev,
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
__devm_gpiod_get_optional(struct device *dev, const char *con_id, devm_gpiod_get_optional(struct device *dev, const char *con_id,
enum gpiod_flags flags) enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
__devm_gpiod_get_index_optional(struct device *dev, const char *con_id, devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
unsigned int index, enum gpiod_flags flags) unsigned int index, enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
...@@ -424,42 +424,6 @@ static inline struct gpio_desc *devm_get_gpiod_from_child( ...@@ -424,42 +424,6 @@ static inline struct gpio_desc *devm_get_gpiod_from_child(
#endif /* CONFIG_GPIOLIB */ #endif /* CONFIG_GPIOLIB */
/*
* Vararg-hacks! This is done to transition the kernel to always pass
* the options flags argument to the below functions. During a transition
* phase these vararg macros make both old-and-newstyle code compile,
* but when all calls to the elder API are removed, these should go away
* and the __gpiod_get() etc functions above be renamed just gpiod_get()
* etc.
*/
#define __gpiod_get(dev, con_id, flags, ...) __gpiod_get(dev, con_id, flags)
#define gpiod_get(varargs...) __gpiod_get(varargs, GPIOD_ASIS)
#define __gpiod_get_index(dev, con_id, index, flags, ...) \
__gpiod_get_index(dev, con_id, index, flags)
#define gpiod_get_index(varargs...) __gpiod_get_index(varargs, GPIOD_ASIS)
#define __gpiod_get_optional(dev, con_id, flags, ...) \
__gpiod_get_optional(dev, con_id, flags)
#define gpiod_get_optional(varargs...) __gpiod_get_optional(varargs, GPIOD_ASIS)
#define __gpiod_get_index_optional(dev, con_id, index, flags, ...) \
__gpiod_get_index_optional(dev, con_id, index, flags)
#define gpiod_get_index_optional(varargs...) \
__gpiod_get_index_optional(varargs, GPIOD_ASIS)
#define __devm_gpiod_get(dev, con_id, flags, ...) \
__devm_gpiod_get(dev, con_id, flags)
#define devm_gpiod_get(varargs...) __devm_gpiod_get(varargs, GPIOD_ASIS)
#define __devm_gpiod_get_index(dev, con_id, index, flags, ...) \
__devm_gpiod_get_index(dev, con_id, index, flags)
#define devm_gpiod_get_index(varargs...) \
__devm_gpiod_get_index(varargs, GPIOD_ASIS)
#define __devm_gpiod_get_optional(dev, con_id, flags, ...) \
__devm_gpiod_get_optional(dev, con_id, flags)
#define devm_gpiod_get_optional(varargs...) \
__devm_gpiod_get_optional(varargs, GPIOD_ASIS)
#define __devm_gpiod_get_index_optional(dev, con_id, index, flags, ...) \
__devm_gpiod_get_index_optional(dev, con_id, index, flags)
#define devm_gpiod_get_index_optional(varargs...) \
__devm_gpiod_get_index_optional(varargs, GPIOD_ASIS)
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
int gpiod_export(struct gpio_desc *desc, bool direction_may_change); int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment