mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
gpio: mmio: remove struct bgpio_pdata
With no more users, we can now remove struct bgpio_pdata. Move the relevant bits from bgpio_parse_fw() into bgpio_pdev_probe() while maintaining the logical ordering (get flags before calling bgpio_init()). Link: https://lore.kernel.org/r/20250701-gpio-mmio-pdata-v2-6-ebf34d273497@linaro.org Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
@@ -712,43 +712,6 @@ static const struct of_device_id bgpio_of_match[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, bgpio_of_match);
|
||||
|
||||
static struct bgpio_pdata *bgpio_parse_fw(struct device *dev, unsigned long *flags)
|
||||
{
|
||||
struct bgpio_pdata *pdata;
|
||||
const char *label;
|
||||
unsigned int base;
|
||||
int ret;
|
||||
|
||||
if (!dev_fwnode(dev))
|
||||
return NULL;
|
||||
|
||||
pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
pdata->base = -1;
|
||||
|
||||
if (device_is_big_endian(dev))
|
||||
*flags |= BGPIOF_BIG_ENDIAN_BYTE_ORDER;
|
||||
|
||||
if (device_property_read_bool(dev, "no-output"))
|
||||
*flags |= BGPIOF_NO_OUTPUT;
|
||||
|
||||
ret = device_property_read_string(dev, "label", &label);
|
||||
if (!ret)
|
||||
pdata->label = label;
|
||||
|
||||
/*
|
||||
* This property *must not* be used in device-tree sources, it's only
|
||||
* meant to be passed to the driver from board files and MFD core.
|
||||
*/
|
||||
ret = device_property_read_u32(dev, "gpio-mmio,base", &base);
|
||||
if (!ret && base <= INT_MAX)
|
||||
pdata->base = base;
|
||||
|
||||
return pdata;
|
||||
}
|
||||
|
||||
static int bgpio_pdev_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -760,18 +723,10 @@ static int bgpio_pdev_probe(struct platform_device *pdev)
|
||||
void __iomem *dirin;
|
||||
unsigned long sz;
|
||||
unsigned long flags = 0;
|
||||
unsigned int base;
|
||||
int err;
|
||||
struct gpio_chip *gc;
|
||||
struct bgpio_pdata *pdata;
|
||||
|
||||
pdata = bgpio_parse_fw(dev, &flags);
|
||||
if (IS_ERR(pdata))
|
||||
return PTR_ERR(pdata);
|
||||
|
||||
if (!pdata) {
|
||||
pdata = dev_get_platdata(dev);
|
||||
flags = pdev->id_entry->driver_data;
|
||||
}
|
||||
const char *label;
|
||||
|
||||
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
|
||||
if (!r)
|
||||
@@ -803,17 +758,27 @@ static int bgpio_pdev_probe(struct platform_device *pdev)
|
||||
if (!gc)
|
||||
return -ENOMEM;
|
||||
|
||||
if (device_is_big_endian(dev))
|
||||
flags |= BGPIOF_BIG_ENDIAN_BYTE_ORDER;
|
||||
|
||||
if (device_property_read_bool(dev, "no-output"))
|
||||
flags |= BGPIOF_NO_OUTPUT;
|
||||
|
||||
err = bgpio_init(gc, dev, sz, dat, set, clr, dirout, dirin, flags);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (pdata) {
|
||||
if (pdata->label)
|
||||
gc->label = pdata->label;
|
||||
gc->base = pdata->base;
|
||||
if (pdata->ngpio > 0)
|
||||
gc->ngpio = pdata->ngpio;
|
||||
}
|
||||
err = device_property_read_string(dev, "label", &label);
|
||||
if (!err)
|
||||
gc->label = label;
|
||||
|
||||
/*
|
||||
* This property *must not* be used in device-tree sources, it's only
|
||||
* meant to be passed to the driver from board files and MFD core.
|
||||
*/
|
||||
err = device_property_read_u32(dev, "gpio-mmio,base", &base);
|
||||
if (!err && base <= INT_MAX)
|
||||
gc->base = base;
|
||||
|
||||
platform_set_drvdata(pdev, gc);
|
||||
|
||||
|
||||
@@ -718,12 +718,6 @@ const unsigned long *gpiochip_query_valid_mask(const struct gpio_chip *gc);
|
||||
/* get driver data */
|
||||
void *gpiochip_get_data(struct gpio_chip *gc);
|
||||
|
||||
struct bgpio_pdata {
|
||||
const char *label;
|
||||
int base;
|
||||
int ngpio;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
||||
|
||||
int gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *gc,
|
||||
|
||||
Reference in New Issue
Block a user