mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
2d910fe1e6
After commit 0edb555a65
("platform: Make platform_driver::remove()
return void") .remove() is (again) the right callback to implement for
platform drivers.
Convert all platform drivers below drivers/ata/ to use .remove(), with
the eventual goal to drop struct platform_driver::remove_new(). As
.remove() and .remove_new() have the same prototypes, conversion is done
by just changing the structure member name in the driver initializer.
While touching these files, make indention of the struct initializer
consistent in several files.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20241016141609.27329-2-u.kleine-koenig@baylibre.com
Signed-off-by: Niklas Cassel <cassel@kernel.org>
100 lines
2.4 KiB
C
100 lines
2.4 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* OF-platform PATA driver
|
|
*
|
|
* Copyright (c) 2007 MontaVista Software, Inc.
|
|
* Anton Vorontsov <avorontsov@ru.mvista.com>
|
|
*/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/module.h>
|
|
#include <linux/of_address.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/ata_platform.h>
|
|
#include <linux/libata.h>
|
|
|
|
#define DRV_NAME "pata_of_platform"
|
|
|
|
static const struct scsi_host_template pata_platform_sht = {
|
|
ATA_PIO_SHT(DRV_NAME),
|
|
};
|
|
|
|
static int pata_of_platform_probe(struct platform_device *ofdev)
|
|
{
|
|
int ret;
|
|
struct device_node *dn = ofdev->dev.of_node;
|
|
struct resource io_res;
|
|
struct resource ctl_res;
|
|
struct resource irq_res;
|
|
unsigned int reg_shift = 0;
|
|
int pio_mode = 0;
|
|
int pio_mask;
|
|
bool use16bit;
|
|
int irq;
|
|
|
|
ret = of_address_to_resource(dn, 0, &io_res);
|
|
if (ret) {
|
|
dev_err(&ofdev->dev, "can't get IO address from "
|
|
"device tree\n");
|
|
return -EINVAL;
|
|
}
|
|
|
|
ret = of_address_to_resource(dn, 1, &ctl_res);
|
|
if (ret) {
|
|
dev_err(&ofdev->dev, "can't get CTL address from "
|
|
"device tree\n");
|
|
return -EINVAL;
|
|
}
|
|
|
|
memset(&irq_res, 0, sizeof(irq_res));
|
|
|
|
irq = platform_get_irq_optional(ofdev, 0);
|
|
if (irq < 0 && irq != -ENXIO)
|
|
return irq;
|
|
if (irq > 0) {
|
|
irq_res.start = irq;
|
|
irq_res.end = irq;
|
|
}
|
|
|
|
of_property_read_u32(dn, "reg-shift", ®_shift);
|
|
|
|
if (!of_property_read_u32(dn, "pio-mode", &pio_mode)) {
|
|
if (pio_mode > 6) {
|
|
dev_err(&ofdev->dev, "invalid pio-mode\n");
|
|
return -EINVAL;
|
|
}
|
|
} else {
|
|
dev_info(&ofdev->dev, "pio-mode unspecified, assuming PIO0\n");
|
|
}
|
|
|
|
use16bit = of_property_read_bool(dn, "ata-generic,use16bit");
|
|
|
|
pio_mask = 1 << pio_mode;
|
|
pio_mask |= (1 << pio_mode) - 1;
|
|
|
|
return __pata_platform_probe(&ofdev->dev, &io_res, &ctl_res, irq > 0 ? &irq_res : NULL,
|
|
reg_shift, pio_mask, &pata_platform_sht,
|
|
use16bit);
|
|
}
|
|
|
|
static const struct of_device_id pata_of_platform_match[] = {
|
|
{ .compatible = "ata-generic", },
|
|
{ /* sentinel */ }
|
|
};
|
|
MODULE_DEVICE_TABLE(of, pata_of_platform_match);
|
|
|
|
static struct platform_driver pata_of_platform_driver = {
|
|
.driver = {
|
|
.name = DRV_NAME,
|
|
.of_match_table = pata_of_platform_match,
|
|
},
|
|
.probe = pata_of_platform_probe,
|
|
.remove = ata_platform_remove_one,
|
|
};
|
|
|
|
module_platform_driver(pata_of_platform_driver);
|
|
|
|
MODULE_DESCRIPTION("OF-platform PATA driver");
|
|
MODULE_AUTHOR("Anton Vorontsov <avorontsov@ru.mvista.com>");
|
|
MODULE_LICENSE("GPL");
|