gpio: cs5535: use dynamically allocated priv struct

Static allocation is deprecated.

Remove the FIXME as gpiochip_add_data allows using gpiod_get_data.
No need for container_of.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20260313001209.117823-1-rosenp@gmail.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
This commit is contained in:
Rosen Penev
2026-03-12 17:12:09 -07:00
committed by Bartosz Golaszewski
parent 3518fd4c78
commit a6e53d05ab

View File

@@ -39,10 +39,6 @@ static ulong mask = GPIO_DEFAULT_MASK;
module_param_named(mask, mask, ulong, 0444);
MODULE_PARM_DESC(mask, "GPIO channel mask.");
/*
* FIXME: convert this singleton driver to use the state container
* design pattern, see Documentation/driver-api/driver-model/design-patterns.rst
*/
static struct cs5535_gpio_chip {
struct gpio_chip chip;
resource_size_t base;
@@ -285,30 +281,29 @@ static const char * const cs5535_gpio_names[] = {
"GPIO28", NULL, NULL, NULL,
};
static struct cs5535_gpio_chip cs5535_gpio_chip = {
.chip = {
.owner = THIS_MODULE,
.label = DRV_NAME,
.base = 0,
.ngpio = 32,
.names = cs5535_gpio_names,
.request = chip_gpio_request,
.get = chip_gpio_get,
.set = chip_gpio_set,
.direction_input = chip_direction_input,
.direction_output = chip_direction_output,
},
};
static int cs5535_gpio_probe(struct platform_device *pdev)
{
struct cs5535_gpio_chip *priv;
struct gpio_chip *gc;
struct resource *res;
int err = -EIO;
ulong mask_orig = mask;
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
gc = &priv->chip;
gc->owner = THIS_MODULE;
gc->label = DRV_NAME;
gc->ngpio = 32;
gc->names = cs5535_gpio_names;
gc->request = chip_gpio_request;
gc->get = chip_gpio_get;
gc->set = chip_gpio_set;
gc->direction_input = chip_direction_input;
gc->direction_output = chip_direction_output;
/* There are two ways to get the GPIO base address; one is by
* fetching it from MSR_LBAR_GPIO, the other is by reading the
* PCI BAR info. The latter method is easier (especially across
@@ -329,9 +324,9 @@ static int cs5535_gpio_probe(struct platform_device *pdev)
}
/* set up the driver-specific struct */
cs5535_gpio_chip.base = res->start;
cs5535_gpio_chip.pdev = pdev;
spin_lock_init(&cs5535_gpio_chip.lock);
priv->base = res->start;
priv->pdev = pdev;
spin_lock_init(&priv->lock);
dev_info(&pdev->dev, "reserved resource region %pR\n", res);
@@ -347,8 +342,7 @@ static int cs5535_gpio_probe(struct platform_device *pdev)
mask_orig, mask);
/* finally, register with the generic GPIO API */
return devm_gpiochip_add_data(&pdev->dev, &cs5535_gpio_chip.chip,
&cs5535_gpio_chip);
return devm_gpiochip_add_data(&pdev->dev, gc, priv);
}
static struct platform_driver cs5535_gpio_driver = {