Commit cd56f35e authored by Linus Walleij's avatar Linus Walleij Committed by Jens Axboe

ata: rb532_cf: Convert to use GPIO descriptors

Pass a GPIO descriptor for the device instead of a hardcoded
GPIO number from the global GPIO numberspace. Use gpio
descriptors throughout.

Cut the now completely unused platform data for the CF slot.

Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Waldemar Brodkorb <wbx@openadk.org>
Cc: Matt Redfearn <matt.redfearn@mips.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 83a7faac
...@@ -71,12 +71,6 @@ struct korina_device { ...@@ -71,12 +71,6 @@ struct korina_device {
struct net_device *dev; struct net_device *dev;
}; };
struct cf_device {
int gpio_pin;
void *dev;
struct gendisk *gd;
};
struct mpmc_device { struct mpmc_device {
unsigned char state; unsigned char state;
spinlock_t lock; spinlock_t lock;
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/mtd/platnand.h> #include <linux/mtd/platnand.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
...@@ -127,14 +128,18 @@ static struct resource cf_slot0_res[] = { ...@@ -127,14 +128,18 @@ static struct resource cf_slot0_res[] = {
} }
}; };
static struct cf_device cf_slot0_data = { static struct gpiod_lookup_table cf_slot0_gpio_table = {
.gpio_pin = CF_GPIO_NUM .dev_id = "pata-rb532-cf",
.table = {
GPIO_LOOKUP("gpio0", CF_GPIO_NUM,
NULL, GPIO_ACTIVE_HIGH),
{ },
},
}; };
static struct platform_device cf_slot0 = { static struct platform_device cf_slot0 = {
.id = -1, .id = -1,
.name = "pata-rb532-cf", .name = "pata-rb532-cf",
.dev.platform_data = &cf_slot0_data,
.resource = cf_slot0_res, .resource = cf_slot0_res,
.num_resources = ARRAY_SIZE(cf_slot0_res), .num_resources = ARRAY_SIZE(cf_slot0_res),
}; };
...@@ -305,6 +310,7 @@ static int __init plat_setup_devices(void) ...@@ -305,6 +310,7 @@ static int __init plat_setup_devices(void)
dev_set_drvdata(&korina_dev0.dev, &korina_dev0_data); dev_set_drvdata(&korina_dev0.dev, &korina_dev0_data);
gpiod_add_lookup_table(&cf_slot0_gpio_table);
return platform_add_devices(rb532_devs, ARRAY_SIZE(rb532_devs)); return platform_add_devices(rb532_devs, ARRAY_SIZE(rb532_devs));
} }
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/gpio.h> #include <linux/gpio/consumer.h>
#include <linux/libata.h> #include <linux/libata.h>
#include <scsi/scsi_host.h> #include <scsi/scsi_host.h>
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
struct rb532_cf_info { struct rb532_cf_info {
void __iomem *iobase; void __iomem *iobase;
unsigned int gpio_line; struct gpio_desc *gpio_line;
unsigned int irq; unsigned int irq;
}; };
...@@ -60,7 +60,7 @@ static irqreturn_t rb532_pata_irq_handler(int irq, void *dev_instance) ...@@ -60,7 +60,7 @@ static irqreturn_t rb532_pata_irq_handler(int irq, void *dev_instance)
struct ata_host *ah = dev_instance; struct ata_host *ah = dev_instance;
struct rb532_cf_info *info = ah->private_data; struct rb532_cf_info *info = ah->private_data;
if (gpio_get_value(info->gpio_line)) { if (gpiod_get_value(info->gpio_line)) {
irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW); irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW);
ata_sff_interrupt(info->irq, dev_instance); ata_sff_interrupt(info->irq, dev_instance);
} else { } else {
...@@ -106,10 +106,9 @@ static void rb532_pata_setup_ports(struct ata_host *ah) ...@@ -106,10 +106,9 @@ static void rb532_pata_setup_ports(struct ata_host *ah)
static int rb532_pata_driver_probe(struct platform_device *pdev) static int rb532_pata_driver_probe(struct platform_device *pdev)
{ {
int irq; int irq;
int gpio; struct gpio_desc *gpiod;
struct resource *res; struct resource *res;
struct ata_host *ah; struct ata_host *ah;
struct cf_device *pdata;
struct rb532_cf_info *info; struct rb532_cf_info *info;
int ret; int ret;
...@@ -125,23 +124,12 @@ static int rb532_pata_driver_probe(struct platform_device *pdev) ...@@ -125,23 +124,12 @@ static int rb532_pata_driver_probe(struct platform_device *pdev)
return -ENOENT; return -ENOENT;
} }
pdata = dev_get_platdata(&pdev->dev); gpiod = devm_gpiod_get(&pdev->dev, NULL, GPIOD_IN);
if (!pdata) { if (IS_ERR(gpiod)) {
dev_err(&pdev->dev, "no platform data specified\n");
return -EINVAL;
}
gpio = pdata->gpio_pin;
if (gpio < 0) {
dev_err(&pdev->dev, "no GPIO found for irq%d\n", irq); dev_err(&pdev->dev, "no GPIO found for irq%d\n", irq);
return -ENOENT; return PTR_ERR(gpiod);
}
ret = gpio_request(gpio, DRV_NAME);
if (ret) {
dev_err(&pdev->dev, "GPIO request failed\n");
return ret;
} }
gpiod_set_consumer_name(gpiod, DRV_NAME);
/* allocate host */ /* allocate host */
ah = ata_host_alloc(&pdev->dev, RB500_CF_MAXPORTS); ah = ata_host_alloc(&pdev->dev, RB500_CF_MAXPORTS);
...@@ -153,7 +141,7 @@ static int rb532_pata_driver_probe(struct platform_device *pdev) ...@@ -153,7 +141,7 @@ static int rb532_pata_driver_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
ah->private_data = info; ah->private_data = info;
info->gpio_line = gpio; info->gpio_line = gpiod;
info->irq = irq; info->irq = irq;
info->iobase = devm_ioremap_nocache(&pdev->dev, res->start, info->iobase = devm_ioremap_nocache(&pdev->dev, res->start,
...@@ -161,26 +149,14 @@ static int rb532_pata_driver_probe(struct platform_device *pdev) ...@@ -161,26 +149,14 @@ static int rb532_pata_driver_probe(struct platform_device *pdev)
if (!info->iobase) if (!info->iobase)
return -ENOMEM; return -ENOMEM;
ret = gpio_direction_input(gpio);
if (ret) {
dev_err(&pdev->dev, "unable to set GPIO direction, err=%d\n",
ret);
goto err_free_gpio;
}
rb532_pata_setup_ports(ah); rb532_pata_setup_ports(ah);
ret = ata_host_activate(ah, irq, rb532_pata_irq_handler, ret = ata_host_activate(ah, irq, rb532_pata_irq_handler,
IRQF_TRIGGER_LOW, &rb532_pata_sht); IRQF_TRIGGER_LOW, &rb532_pata_sht);
if (ret) if (ret)
goto err_free_gpio; return ret;
return 0; return 0;
err_free_gpio:
gpio_free(gpio);
return ret;
} }
static int rb532_pata_driver_remove(struct platform_device *pdev) static int rb532_pata_driver_remove(struct platform_device *pdev)
...@@ -189,7 +165,6 @@ static int rb532_pata_driver_remove(struct platform_device *pdev) ...@@ -189,7 +165,6 @@ static int rb532_pata_driver_remove(struct platform_device *pdev)
struct rb532_cf_info *info = ah->private_data; struct rb532_cf_info *info = ah->private_data;
ata_host_detach(ah); ata_host_detach(ah);
gpio_free(info->gpio_line);
return 0; return 0;
} }
......
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