forked from Minki/linux
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: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
83a7faace1
commit
cd56f35e52
@ -71,12 +71,6 @@ struct korina_device {
|
||||
struct net_device *dev;
|
||||
};
|
||||
|
||||
struct cf_device {
|
||||
int gpio_pin;
|
||||
void *dev;
|
||||
struct gendisk *gd;
|
||||
};
|
||||
|
||||
struct mpmc_device {
|
||||
unsigned char state;
|
||||
spinlock_t lock;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <linux/mtd/platnand.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/serial_8250.h>
|
||||
@ -127,14 +128,18 @@ static struct resource cf_slot0_res[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static struct cf_device cf_slot0_data = {
|
||||
.gpio_pin = CF_GPIO_NUM
|
||||
static struct gpiod_lookup_table cf_slot0_gpio_table = {
|
||||
.dev_id = "pata-rb532-cf",
|
||||
.table = {
|
||||
GPIO_LOOKUP("gpio0", CF_GPIO_NUM,
|
||||
NULL, GPIO_ACTIVE_HIGH),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device cf_slot0 = {
|
||||
.id = -1,
|
||||
.name = "pata-rb532-cf",
|
||||
.dev.platform_data = &cf_slot0_data,
|
||||
.resource = cf_slot0_res,
|
||||
.num_resources = ARRAY_SIZE(cf_slot0_res),
|
||||
};
|
||||
@ -305,6 +310,7 @@ static int __init plat_setup_devices(void)
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
||||
#include <linux/libata.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
@ -49,7 +49,7 @@
|
||||
|
||||
struct rb532_cf_info {
|
||||
void __iomem *iobase;
|
||||
unsigned int gpio_line;
|
||||
struct gpio_desc *gpio_line;
|
||||
unsigned int irq;
|
||||
};
|
||||
|
||||
@ -60,7 +60,7 @@ static irqreturn_t rb532_pata_irq_handler(int irq, void *dev_instance)
|
||||
struct ata_host *ah = dev_instance;
|
||||
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);
|
||||
ata_sff_interrupt(info->irq, dev_instance);
|
||||
} else {
|
||||
@ -106,10 +106,9 @@ static void rb532_pata_setup_ports(struct ata_host *ah)
|
||||
static int rb532_pata_driver_probe(struct platform_device *pdev)
|
||||
{
|
||||
int irq;
|
||||
int gpio;
|
||||
struct gpio_desc *gpiod;
|
||||
struct resource *res;
|
||||
struct ata_host *ah;
|
||||
struct cf_device *pdata;
|
||||
struct rb532_cf_info *info;
|
||||
int ret;
|
||||
|
||||
@ -125,23 +124,12 @@ static int rb532_pata_driver_probe(struct platform_device *pdev)
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
pdata = dev_get_platdata(&pdev->dev);
|
||||
if (!pdata) {
|
||||
dev_err(&pdev->dev, "no platform data specified\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
gpio = pdata->gpio_pin;
|
||||
if (gpio < 0) {
|
||||
gpiod = devm_gpiod_get(&pdev->dev, NULL, GPIOD_IN);
|
||||
if (IS_ERR(gpiod)) {
|
||||
dev_err(&pdev->dev, "no GPIO found for irq%d\n", irq);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
ret = gpio_request(gpio, DRV_NAME);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "GPIO request failed\n");
|
||||
return ret;
|
||||
return PTR_ERR(gpiod);
|
||||
}
|
||||
gpiod_set_consumer_name(gpiod, DRV_NAME);
|
||||
|
||||
/* allocate host */
|
||||
ah = ata_host_alloc(&pdev->dev, RB500_CF_MAXPORTS);
|
||||
@ -153,7 +141,7 @@ static int rb532_pata_driver_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
ah->private_data = info;
|
||||
info->gpio_line = gpio;
|
||||
info->gpio_line = gpiod;
|
||||
info->irq = irq;
|
||||
|
||||
info->iobase = devm_ioremap_nocache(&pdev->dev, res->start,
|
||||
@ -161,26 +149,14 @@ static int rb532_pata_driver_probe(struct platform_device *pdev)
|
||||
if (!info->iobase)
|
||||
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);
|
||||
|
||||
ret = ata_host_activate(ah, irq, rb532_pata_irq_handler,
|
||||
IRQF_TRIGGER_LOW, &rb532_pata_sht);
|
||||
if (ret)
|
||||
goto err_free_gpio;
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_gpio:
|
||||
gpio_free(gpio);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
ata_host_detach(ah);
|
||||
gpio_free(info->gpio_line);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user