pcmcia: at91_cf: clean up and add DT support
Subsystems (4)
v3 cover pcmcia: at91_cf: clean up and add DT support
These patches clean up at91_cf a bit and add DT bindings.
They are based on a previous series from Joachim Eastwood and other cleanup patches by Fabio and Laurent.
I have collected them together as they are lying around for some time.
Greg kindly told me that he can take them through his char/misc driver tree, so I resend the series.
Thanks for your help, best regards.
v3: rebased on top of 3.10-rc4
v2: add 2 more cleanup patches:
- move to module_platform_driver_probe()
- little trivial indentation fix
Fabio Porcedda (1):
pcmcia: at91_cf: use module_platform_driver_probe()
Joachim Eastwood (5):
pcmcia: at91_cf: fix gpio_get_value in at91_cf_get_status
pcmcia: at91_cf: convert to dev_ print functions
pcmcia: at91_cf: use devm_ functions for allocations
pcmcia: at91_cf: clean up header includes
pcmcia: at91_cf: add support for DT
Laurent Navet (1):
pcmcia/trivial: at91_cf: fix checkpatch error
.../devicetree/bindings/ata/atmel-at91_cf.txt | 19 +++ drivers/pcmcia/Kconfig | 2 +- drivers/pcmcia/at91_cf.c | 176 ++++++++++----------- 3 files changed, 108 insertions(+), 89 deletions(-) create mode 100644 Documentation/devicetree/bindings/ata/atmel-at91_cf.txt
Signature · 1 line
1.8.2.2
PATCH v3 1/7 pcmcia: at91_cf: fix gpio_get_value in at91_cf_get_status
From: Joachim Eastwood <[email protected]>
Commit 80af9e6d (pcmcia at91_cf: fix raw gpio number usage) forgot to change the parameter in gpio_get_value after adding gpio validation.
--- drivers/pcmcia/at91_cf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/pcmcia/at91_cf.c +2 -2
@@ -100,9 +100,9 @@ static int at91_cf_get_status(struct pcmcia_socket *s, u_int *sp)int vcc =gpio_is_valid (cf->board->vcc_pin); *sp =SS_DETECT |SS_3VCARD ; -if (!rdy ||gpio_get_value (rdy)) +if (!rdy ||gpio_get_value (cf->board->irq_pin)) *sp |=SS_READY ; -if (!vcc ||gpio_get_value (vcc)) +if (!vcc ||gpio_get_value (cf->board->vcc_pin)) *sp |=SS_POWERON ; }else *sp =0 ;
Signature · 1 line
1.8.2.2
Re: [PATCH v3 1/7] pcmcia: at91_cf: fix gpio_get_value in at91_cf_get_status
Quoted 5 lines · Nicolas Ferre
From: Joachim Eastwood <[email protected]>
Commit
80af9e6d(pcmciaat91_cf: fix raw gpio number usage) forgot to change the parameter ingpio_get_valueafter adding gpio validation.
this is a fix so should for in stable tree too
since #3.4
Best Regards,
J.
Quoted 31 lines
Signed-off-by Joachim Eastwood <[email protected]>Signed-off-by Nicolas Ferre <[email protected]>--- drivers/pcmcia/at91_cf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)drivers/pcmcia/at91_cf.c +2
-2@@ -100,9 +100,9 @@ static int at91_cf_get_status(struct pcmcia_socket *s, u_int *sp)int vcc =gpio_is_valid (cf->board->vcc_pin); *sp =SS_DETECT |SS_3VCARD ; -if (!rdy ||gpio_get_value (rdy)) +if (!rdy ||gpio_get_value (cf->board->irq_pin)) *sp |=SS_READY ; -if (!vcc ||gpio_get_value (vcc)) +if (!vcc ||gpio_get_value (cf->board->vcc_pin)) *sp |=SS_POWERON ; }else *sp =0 ;Signature · 7 lines
1.8.2.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel at lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH v3 2/7 pcmcia: at91_cf: convert to dev_ print functions
In reply to Nicolas FerreFrom: Joachim Eastwood <[email protected]>
Convert all pr_* functions to equivalent dev_* functions and drop the driver_name variable.
--- drivers/pcmcia/at91_cf.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-)
drivers/pcmcia/at91_cf.c +10 -12
@@ -41,8 +41,6 @@/*--------------------------------------------------------------------------*/ -static const char driver_name[] ="at91_cf" ; -struct at91_cf_socket {struct pcmcia_socket socket;
@@ -76,7 +74,7 @@ static irqreturn_t at91_cf_irq(int irq, void *_cf)/* kick pccard as needed */ if (present != cf->present) { cf->present = present; -pr_debug ("%s: card %s\n" , driver_name, +dev_dbg (&cf->pdev->dev,"card %s\n" , present ?"present" :"gone" );pcmcia_parse_events (&cf->socket,SS_DETECT ); }
@@ -134,8 +132,8 @@ at91_cf_set_socket(struct pcmcia_socket *sock, struct socket_state_t *s)/* toggle reset if needed */ gpio_set_value (cf->board->rst_pin, s->flags &SS_RESET ); -pr_debug ("%s: Vcc %d, io_irq %d, flags %04x csc %04x\n" , - driver_name, s->Vcc, s->io_irq, s->flags, s->csc_mask); +dev_dbg (&cf->pdev->dev,"Vcc %d, io_irq %d, flags %04x csc %04x\n" , + s->Vcc, s->io_irq, s->flags, s->csc_mask);return 0 ; }
@@ -171,10 +169,10 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)*/ if (!(io->flags & (MAP_16BIT |MAP_AUTOSZ ))) { csr |=AT91_SMC_DBW_8 ; -pr_debug ("%s: 8bit i/o bus\n" , driver_name); +dev_dbg (&cf->pdev->dev,"8bit i/o bus\n" ); }else { csr |=AT91_SMC_DBW_16 ; -pr_debug ("%s: 16bit i/o bus\n" , driver_name); +dev_dbg (&cf->pdev->dev,"16bit i/o bus\n" ); }at91_ramc_write (0 ,AT91_SMC_CSR (cf->board->chipselect), csr);
@@ -242,7 +240,7 @@ static int __init at91_cf_probe(struct platform_device *pdev) status =gpio_request (board->det_pin,"cf_det" );if (status <0 ) goto fail0; - status =request_irq (gpio_to_irq (board->det_pin), at91_cf_irq,0 , driver_name, cf); + status =request_irq (gpio_to_irq (board->det_pin), at91_cf_irq,0 ,"at91_cf detect" , cf);if (status <0 ) goto fail00;device_init_wakeup (&pdev->dev,1 );
@@ -268,7 +266,7 @@ static int __init at91_cf_probe(struct platform_device *pdev)if (status <0 ) goto fail0c; status =request_irq (gpio_to_irq (board->irq_pin), at91_cf_irq, -IRQF_SHARED , driver_name, cf); +IRQF_SHARED ,"at91_cf" , cf);if (status <0 ) goto fail0d; cf->socket.pci_irq =gpio_to_irq (board->irq_pin);
@@ -284,12 +282,12 @@ static int __init at91_cf_probe(struct platform_device *pdev) }/* reserve chip-select regions */ -if (!request_mem_region (io->start,resource_size (io), driver_name)) { +if (!request_mem_region (io->start,resource_size (io),"at91_cf" )) { status = -ENXIO ; goto fail1; } -pr_info ("%s: irqs det #%d, io #%d\n" , driver_name, +dev_info (&pdev->dev,"irqs det #%d, io #%d\n" ,gpio_to_irq (board->det_pin),gpio_to_irq (board->irq_pin)); cf->socket.owner =THIS_MODULE ;
@@ -391,7 +389,7 @@ static int at91_cf_resume(struct platform_device *pdev)static struct platform_driver at91_cf_driver = { .driver = { - .name = (char *) driver_name, + .name ="at91_cf" , .owner =THIS_MODULE , }, .remove =__exit_p (at91_cf_remove),
Signature · 1 line
1.8.2.2
PATCH v3 3/7 pcmcia: at91_cf: use devm_ functions for allocations
In reply to Nicolas FerreFrom: Joachim Eastwood <[email protected]>
--- drivers/pcmcia/at91_cf.c | 77 +++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 53 deletions(-)
drivers/pcmcia/at91_cf.c +24 -53
@@ -227,7 +227,7 @@ static int __init at91_cf_probe(struct platform_device *pdev)if (!io)return -ENODEV ; - cf =kzalloc (sizeof *cf,GFP_KERNEL ); + cf =devm_kzalloc (&pdev->dev,sizeof (*cf),GFP_KERNEL );if (!cf)return -ENOMEM ;
@@ -237,22 +237,25 @@ static int __init at91_cf_probe(struct platform_device *pdev)platform_set_drvdata (pdev, cf);/* must be a GPIO; ergo must trigger on both edges */ - status =gpio_request (board->det_pin,"cf_det" ); + status =devm_gpio_request (&pdev->dev, board->det_pin,"cf_det" );if (status <0 ) - goto fail0; - status =request_irq (gpio_to_irq (board->det_pin), at91_cf_irq,0 ,"at91_cf detect" , cf); +return status; + + status =devm_request_irq (&pdev->dev,gpio_to_irq (board->det_pin), + at91_cf_irq,0 ,"at91_cf detect" , cf);if (status <0 ) - goto fail00; +return status; +device_init_wakeup (&pdev->dev,1 ); - status =gpio_request (board->rst_pin,"cf_rst" ); + status =devm_gpio_request (&pdev->dev, board->rst_pin,"cf_rst" );if (status <0 ) goto fail0a;if (gpio_is_valid (board->vcc_pin)) { - status =gpio_request (board->vcc_pin,"cf_vcc" ); + status =devm_gpio_request (&pdev->dev, board->vcc_pin,"cf_vcc" );if (status <0 ) - goto fail0b; + goto fail0a; }/*
@@ -262,29 +265,30 @@ static int __init at91_cf_probe(struct platform_device *pdev)* (Note: DK board doesn't wire the IRQ pin...) */ if (gpio_is_valid (board->irq_pin)) { - status =gpio_request (board->irq_pin,"cf_irq" ); + status =devm_gpio_request (&pdev->dev, board->irq_pin,"cf_irq" );if (status <0 ) - goto fail0c; - status =request_irq (gpio_to_irq (board->irq_pin), at91_cf_irq, -IRQF_SHARED ,"at91_cf" , cf); + goto fail0a; + + status =devm_request_irq (&pdev->dev,gpio_to_irq (board->irq_pin), + at91_cf_irq,IRQF_SHARED ,"at91_cf" , cf);if (status <0 ) - goto fail0d; + goto fail0a; cf->socket.pci_irq =gpio_to_irq (board->irq_pin); }else cf->socket.pci_irq = nr_irqs +1 ;/* pcmcia layer only remaps "real" memory not iospace */ - cf->socket.io_offset = (unsigned long ) -ioremap (cf->phys_baseaddr +CF_IO_PHYS ,SZ_2K ); + cf->socket.io_offset = (unsigned long )devm_ioremap (&pdev->dev, + cf->phys_baseaddr +CF_IO_PHYS ,SZ_2K );if (!cf->socket.io_offset) { status = -ENXIO ; - goto fail1; + goto fail0a; }/* reserve chip-select regions */ -if (!request_mem_region (io->start,resource_size (io),"at91_cf" )) { +if (!devm_request_mem_region (&pdev->dev, io->start,resource_size (io),"at91_cf" )) { status = -ENXIO ; - goto fail1; + goto fail0a; } dev_info(&pdev->dev, "irqs det #%d, io #%d\n",
@@ -301,55 +305,22 @@ static int __init at91_cf_probe(struct platform_device *pdev) status =pcmcia_register_socket (&cf->socket);if (status <0 ) - goto fail2; + goto fail0a;return 0 ; -fail2: -release_mem_region (io->start,resource_size (io)); -fail1: -if (cf->socket.io_offset) -iounmap ((void __iomem *) cf->socket.io_offset); -if (gpio_is_valid (board->irq_pin)) { -free_irq (gpio_to_irq (board->irq_pin), cf); -fail0d: -gpio_free (board->irq_pin); - } -fail0c: -if (gpio_is_valid (board->vcc_pin)) -gpio_free (board->vcc_pin); -fail0b: -gpio_free (board->rst_pin); fail0a:device_init_wakeup (&pdev->dev,0 ); -free_irq (gpio_to_irq (board->det_pin), cf); -fail00: -gpio_free (board->det_pin); -fail0: -kfree (cf);return status; } static int __exit at91_cf_remove(struct platform_device *pdev) {struct at91_cf_socket *cf =platform_get_drvdata (pdev); -struct at91_cf_data *board = cf->board; -struct resource *io = cf->socket.io[0 ].res;pcmcia_unregister_socket (&cf->socket); -release_mem_region (io->start,resource_size (io)); -iounmap ((void __iomem *) cf->socket.io_offset); -if (gpio_is_valid (board->irq_pin)) { -free_irq (gpio_to_irq (board->irq_pin), cf); -gpio_free (board->irq_pin); - } -if (gpio_is_valid (board->vcc_pin)) -gpio_free (board->vcc_pin); -gpio_free (board->rst_pin);device_init_wakeup (&pdev->dev,0 ); -free_irq (gpio_to_irq (board->det_pin), cf); -gpio_free (board->det_pin); -kfree (cf); +return 0 ; }
Signature · 1 line
1.8.2.2
PATCH v3 4/7 pcmcia: at91_cf: clean up header includes
In reply to Nicolas FerreFrom: Joachim Eastwood <[email protected]>
Use includes from linux/ instead of asm/ and remove a unnecessary mach/ include.
--- drivers/pcmcia/at91_cf.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/pcmcia/at91_cf.c +2 -4
@@ -18,13 +18,11 @@#include <linux/slab.h> #include <linux/gpio.h> #include <linux/platform_data/atmel.h> +#include <linux/io.h> +#include <linux/sizes.h> #include <pcmcia/ss.h> -#include <mach/hardware.h> -#include <asm/io.h> -#include <asm/sizes.h> -#include <mach/at91rm9200_mc.h> #include <mach/at91_ramc.h>
Signature · 1 line
1.8.2.2
PATCH v3 5/7 pcmcia: at91_cf: add support for DT
In reply to Nicolas FerreFrom: Joachim Eastwood <[email protected]>
--- .../devicetree/bindings/ata/atmel-at91_cf.txt | 19 +++++++++ drivers/pcmcia/Kconfig | 2 +- drivers/pcmcia/at91_cf.c | 45 +++++++++++++++++++++- 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/ata/atmel-at91_cf.txt
Documentation/devicetree/bindings/ata/atmel-at91_cf.txt new file +19 -0
@@ -0,0 +1,19 @@ +Atmel AT91RM9200 CompactFlash + +Required properties: +- compatible : "atmel,at91rm9200-cf". +- reg : should specify localbus address and size used. +- gpios : specifies the gpio pins to control the CF device. Detect + and reset gpio's are mandatory while irq and vcc gpio's are + optional and may be set to 0 if not present. + +Example: +compact-flash at 50000000 { + compatible = "atmel,at91rm9200-cf"; + reg = <0x50000000 0x30000000>; + gpios = <&pioC 13 0 /* irq */ + &pioC 15 0 /* detect */ + 0 /* vcc */ + &pioC 5 0 /* reset */ + >; +};
drivers/pcmcia/Kconfig +1 -1
@@ -288,7 +288,7 @@ config BFIN_CFPCMCIA config AT91_CF tristate "AT91 CompactFlash Controller" - depends on PCMCIA && ARCH_AT91RM9200 + depends on PCMCIA && ARCH_AT91 help Say Y here to support the CompactFlash controller on AT91 chips. Or choose M to compile the driver as a module named "at91_cf".
drivers/pcmcia/at91_cf.c +44 -1
69 lines not on this page · raw message
Signature · 1 line
1.8.2.2
PATCH v3 6/7 pcmcia: at91_cf: use module_platform_driver_probe()
In reply to Nicolas FerreFrom: Fabio Porcedda <[email protected]>
Use module_platform_driver_probe() macro which makes the code smaller and simpler.
--- drivers/pcmcia/at91_cf.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-)
drivers/pcmcia/at91_cf.c +1 -11
@@ -411,17 +411,7 @@ static struct platform_driver at91_cf_driver = {/*--------------------------------------------------------------------------*/ -static int __init at91_cf_init (void ) -{ -return platform_driver_probe (&at91_cf_driver, at91_cf_probe); -} -module_init (at91_cf_init); - -static void __exit at91_cf_exit(void) -{ -platform_driver_unregister (&at91_cf_driver); -} -module_exit (at91_cf_exit); +module_platform_driver_probe (at91_cf_driver, at91_cf_probe);MODULE_DESCRIPTION ("AT91 Compact Flash Driver" );MODULE_AUTHOR ("David Brownell" );
Signature · 1 line
1.8.2.2
PATCH v3 7/7 pcmcia/trivial: at91_cf: fix checkpatch error
In reply to Nicolas FerreFrom: Laurent Navet <[email protected]>
fix this checkpatch error:
- ERROR: switch and case should be at the same indent
--- drivers/pcmcia/at91_cf.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/pcmcia/at91_cf.c +8 -8
@@ -119,14 +119,14 @@ at91_cf_set_socket(struct pcmcia_socket *sock, struct socket_state_t *s)/* switch Vcc if needed and possible */ if (gpio_is_valid (cf->board->vcc_pin)) {switch (s->Vcc) { -case 0 : -gpio_set_value (cf->board->vcc_pin,0 ); -break ; -case 33 : -gpio_set_value (cf->board->vcc_pin,1 ); -break ; -default : -return -EINVAL ; +case 0 : +gpio_set_value (cf->board->vcc_pin,0 ); +break ; +case 33 : +gpio_set_value (cf->board->vcc_pin,1 ); +break ; +default : +return -EINVAL ; } }
Signature · 1 line
1.8.2.2
Quoted 8 lines · Nicolas Ferre
These patches clean up
at91_cfa bit and add DT bindings.
They are based on a previous series from Joachim Eastwood and other cleanup patches by Fabio and Laurent.
I have collected them together as they are lying around for some time.Greg kindly told me that he can take them through his char/misc driver tree, so I resend the series.
Quoted 7 lines
Thanks for your help, best regards.
v3: rebased on top of 3.10-rc4
v2: add 2 more cleanup patches:
- move tomodule_platform_driver_probe()
- little trivial indentation fix
on all Acked-by: Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
Best Regards,
J.
Quoted 28 lines
Fabio Porcedda (1):
pcmcia:at91_cf: usemodule_platform_driver_probe()Joachim Eastwood (5):
pcmcia:at91_cf: fixgpio_get_valueinat91_cf_get_status
pcmcia:at91_cf: convert todev_print functions
pcmcia:at91_cf: usedevm_functions for allocations
pcmcia:at91_cf: clean up header includes
pcmcia:at91_cf: add support for DTLaurent Navet (1):
pcmcia/trivial:at91_cf: fix checkpatch error.../devicetree/bindings/ata/atmel-at91_cf.txt | 19 +++ drivers/pcmcia/Kconfig | 2 +- drivers/pcmcia/at91_cf.c | 176 ++++++++++----------- 3 files changed, 108 insertions(+), 89 deletions(-) create mode 100644 Documentation/devicetree/bindings/ata/atmel-at91_cf.txtSignature · 7 lines
1.8.2.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel at lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel