spi: move master of_node init to spi_alloc_master
Subsystems (11)
PATCH 1/3 spi: move master of_node init to spi_alloc_master
--- drivers/spi/spi-altera.c | 3 --- drivers/spi/spi-fsl-lib.c | 1 - drivers/spi/spi-imx.c | 1 - drivers/spi/spi-mpc512x-psc.c | 1 - drivers/spi/spi-mpc52xx-psc.c | 1 - drivers/spi/spi-mpc52xx.c | 1 - drivers/spi/spi-oc-tiny.c | 1 - drivers/spi/spi-ppc4xx.c | 1 - drivers/spi/spi-pxa2xx-pci.c | 1 - drivers/spi/spi-pxa2xx.c | 1 - drivers/spi/spi-tegra.c | 1 - drivers/spi/spi-xilinx.c | 1 - drivers/spi/spi.c | 1 + 13 files changed, 1 insertions(+), 14 deletions(-)
drivers/spi/spi-altera.c +0 -3
@@ -270,9 +270,6 @@ static int __devinit altera_spi_probe(struct platform_device *pdev)if (err) goto exit; } -/* find platform data */ -if (!platp) - hw->bitbang.master->dev.of_node = pdev->dev.of_node;/* register our spi controller */ err =spi_bitbang_start (&hw->bitbang);
drivers/spi/spi-fsl-lib.c +0 -1
@@ -133,7 +133,6 @@ int mpc8xxx_spi_probe(struct device *dev, struct resource *mem, master->transfer = mpc8xxx_spi_transfer; master->cleanup = mpc8xxx_spi_cleanup; - master->dev.of_node = dev->of_node; mpc8xxx_spi =spi_master_get_devdata (master); mpc8xxx_spi->dev = dev;
drivers/spi/spi-imx.c +0 -1
@@ -860,7 +860,6 @@ static int __devinit spi_imx_probe(struct platform_device *pdev) spi_imx->devtype_data->intctrl (spi_imx,0 ); - master->dev.of_node = pdev->dev.of_node; ret =spi_bitbang_start (&spi_imx->bitbang);if (ret) {dev_err (&pdev->dev,"bitbang start failed with %d\n" , ret);
drivers/spi/spi-mpc512x-psc.c +0 -1
@@ -441,7 +441,6 @@ static int __devinit mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr, master->setup = mpc512x_psc_spi_setup; master->transfer = mpc512x_psc_spi_transfer; master->cleanup = mpc512x_psc_spi_cleanup; - master->dev.of_node = dev->of_node; tempp =ioremap (regaddr, size);if (!tempp) {
drivers/spi/spi-mpc52xx-psc.c +0 -1
@@ -398,7 +398,6 @@ static int __devinit mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr, master->setup = mpc52xx_psc_spi_setup; master->transfer = mpc52xx_psc_spi_transfer; master->cleanup = mpc52xx_psc_spi_cleanup; - master->dev.of_node = dev->of_node; mps->psc =ioremap (regaddr, size);if (!mps->psc) {
drivers/spi/spi-mpc52xx.c +0 -1
@@ -437,7 +437,6 @@ static int __devinit mpc52xx_spi_probe(struct platform_device *op) master->setup = mpc52xx_spi_setup; master->transfer = mpc52xx_spi_transfer; master->mode_bits =SPI_CPOL |SPI_CPHA |SPI_LSB_FIRST ; - master->dev.of_node = op->dev.of_node;dev_set_drvdata (&op->dev, master);
drivers/spi/spi-oc-tiny.c +0 -1
@@ -266,7 +266,6 @@ static int __devinit tiny_spi_of_probe(struct platform_device *pdev)if (hw->gpio_cs[i] <0 )return -ENODEV ; } - hw->bitbang.master->dev.of_node = pdev->dev.of_node; val =of_get_property (pdev->dev.of_node,"clock-frequency" , &len);if (val && len >=sizeof (__be32))
drivers/spi/spi-ppc4xx.c +0 -1
@@ -406,7 +406,6 @@ static int __init spi_ppc4xx_of_probe(struct platform_device *op) master =spi_alloc_master (dev,sizeof *hw);if (master ==NULL )return -ENOMEM ; - master->dev.of_node = np;dev_set_drvdata (dev, master); hw =spi_master_get_devdata (master); hw->master =spi_master_get (master);
drivers/spi/spi-pxa2xx-pci.c +0 -1
@@ -90,7 +90,6 @@ static int __devinit ce4100_spi_probe(struct pci_dev *dev, goto err_nomem; pdev->dev.parent = &dev->dev; - pdev->dev.of_node = dev->dev.of_node; ssp = &spi_info->ssp; ssp->phys_base =pci_resource_start (dev,0 ); ssp->mmio_base =ioremap (phys_beg, phys_len);
drivers/spi/spi-pxa2xx.c +0 -1
@@ -1557,7 +1557,6 @@ static int __devinit pxa2xx_spi_probe(struct platform_device *pdev) drv_data->ssp = ssp; master->dev.parent = &pdev->dev; - master->dev.of_node = pdev->dev.of_node;/* the spi->mode bits understood by this driver: */ master->mode_bits =SPI_CPOL |SPI_CPHA |SPI_CS_HIGH ;
drivers/spi/spi-tegra.c +0 -1
@@ -547,7 +547,6 @@ static int __devinit spi_tegra_probe(struct platform_device *pdev) tspi->rx_dma_req.req_sel = spi_tegra_req_sels[pdev->id]; tspi->rx_dma_req.dev = tspi; - master->dev.of_node = pdev->dev.of_node; ret =spi_register_master (master);if (ret <0 )
drivers/spi/spi-xilinx.c +0 -1
@@ -392,7 +392,6 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem, master->bus_num = bus_num; master->num_chipselect = num_cs; - master->dev.of_node = dev->of_node; xspi->mem = *mem; xspi->irq = irq;
drivers/spi/spi.c +1 -0
@@ -556,6 +556,7 @@ struct spi_master *spi_alloc_master(struct device *dev, unsigned size) master->dev.class = &spi_master_class; master->dev.parent =get_device (dev);spi_master_set_devdata (master, &master[1 ]); + master->dev.of_node = dev->of_node;return master; }
Signature · 1 line
1.7.7
PATCH 2/3 of_spi: add generic binding support to specify ncs gpio
This will allow to use gpio for chip select with no modification in the driver binding
When use the ncs-gpios, the gpio number will be passed via the controller_data and the number of chip select will automatically increased.
--- Documentation/devicetree/bindings/spi/spi-bus.txt | 6 +++ drivers/of/of_spi.c | 27 ++++++++--- drivers/spi/spi.c | 51 +++++++++++++++++++- include/linux/spi/spi.h | 5 ++ 4 files changed, 78 insertions(+), 11 deletions(-)
Documentation/devicetree/bindings/spi/spi-bus.txt +6 -0
@@ -12,6 +12,7 @@ The SPI master node requires the following properties: - #size-cells - should be zero. - compatible - name of SPI bus controller following generic names recommended practice. +- ncs-gpios - (optional) gpios chip select. No other properties are required in the SPI bus node. It is assumed that a driver for an SPI bus device will understand that it is an SPI bus. However, the binding does not attempt to define the specific method for
@@ -21,6 +22,8 @@ assumption that board specific platform code will be used to manage chip selects. Individual drivers can define additional properties to support describing the chip select layout. +If ncs-gpios is used the number of chip select will automatically increased. + SPI slave nodes must be children of the SPI master node and can contain the following properties. - reg - (required) chip select address of device.
@@ -34,6 +37,9 @@ contain the following properties. - spi-cs-high - (optional) Empty property indicating device requires chip select active high +If a gpio chipselect is used for the SPI slave the gpio number will be passed +via the controller_data + SPI example for an MPC5200 SPI bus: spi at f00 { #address-cells = <1>;
drivers/of/of_spi.c +19 -8
@@ -12,6 +12,7 @@#include <linux/spi/spi.h> #include <linux/of_irq.h> #include <linux/of_spi.h> +#include <linux/of_gpio.h> /** * of_register_spi_devices - Register child devices onto the SPI bus
@@ -27,6 +28,7 @@ void of_register_spi_devices(struct spi_master *master)const __be32 *prop;int rc;int len; +int ncs_pin;if (!master->dev.of_node)return ;
@@ -50,15 +52,24 @@ void of_register_spi_devices(struct spi_master *master)continue ; } -/* Device address */ - prop =of_get_property (nc,"reg" , &len); -if (!prop || len <sizeof (*prop)) { -dev_err (&master->dev,"%s has no 'reg' property\n" , - nc->full_name); -spi_dev_put (spi); -continue ; +/* ncs gpio */ + ncs_pin =of_get_named_gpio (nc,"ncs-gpio" ,0 ); + +if (gpio_is_valid (ncs_pin)) { + spi->controller_data = (void *)ncs_pin; + spi->chip_select = master->num_chipselect; + master->num_chipselect++; + }else { +/* Device address */ + prop =of_get_property (nc,"reg" , &len); +if (!prop || len <sizeof (*prop)) { +dev_err (&master->dev,"%s has no 'reg' property\n" , + nc->full_name); +spi_dev_put (spi); +continue ; + } + spi->chip_select =be32_to_cpup (prop); } - spi->chip_select =be32_to_cpup (prop);/* Mode (clock phase/polarity/etc.) */ if (of_find_property (nc,"spi-cpha" ,NULL ))
drivers/spi/spi.c +48 -3
87 lines not on this page · raw message
include/linux/spi/spi.h +5 -0
@@ -318,6 +318,11 @@ struct spi_master {/* called on release() to free memory provided by spi_master */ void (*cleanup)(struct spi_device *spi); + +/* gpio chip select */ +int *chipselect_gpios; +int first_gpio_chipselect; +int num_gpio_chipselect; };static inline void *spi_master_get_devdata (struct spi_master *master)
Signature · 1 line
1.7.7
PATCH 2/3 of_spi: add generic binding support to specify ncs gpio
Hi Grant,
ping
Best Regards,
J.
Quoted 214 lines · Jean-Christophe PLAGNIOL-VILLARD
This will allow to use gpio for chip select with no modification in the driver binding
When use the ncs-gpios, the gpio number will be passed via the
controller_dataand the number of chip select will automatically increased.Signed-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>Cc devicetree-discuss at lists.ozlabs.orgCc spi-devel-general at lists.sourceforge.net--- Documentation/devicetree/bindings/spi/spi-bus.txt | 6 +++ drivers/of/of_spi.c | 27 ++++++++--- drivers/spi/spi.c | 51 +++++++++++++++++++- include/linux/spi/spi.h | 5 ++ 4 files changed, 78 insertions(+), 11 deletions(-)Documentation/devicetree/bindings/spi/spi-bus.txt +6
-0@@ -12,6 +12,7 @@ The SPI master node requires the following properties: - #size-cells - should be zero. - compatible - name of SPI bus controller following generic names recommended practice. +- ncs-gpios - (optional) gpios chip select. No other properties are required in the SPI bus node. It is assumed that a driver for an SPI bus device will understand that it is an SPI bus. However, the binding does not attempt to define the specific method for@@ -21,6 +22,8 @@ assumption that board specific platform code will be used to manage chip selects. Individual drivers can define additional properties to support describing the chip select layout. +If ncs-gpios is used the number of chip select will automatically increased. + SPI slave nodes must be children of the SPI master node and can contain the following properties. - reg - (required) chip select address of device.@@ -34,6 +37,9 @@ contain the following properties. - spi-cs-high - (optional) Empty property indicating device requires chip select active high +If a gpio chipselect is used for the SPI slave the gpio number will be passed +via the controller_data + SPI example for an MPC5200 SPI bus: spi at f00 { #address-cells = <1>;drivers/of/of_spi.c +19
-8@@ -12,6 +12,7 @@#include <linux/spi/spi.h> #include <linux/of_irq.h> #include <linux/of_spi.h> +#include <linux/of_gpio.h> /** * of_register_spi_devices - Register child devices onto the SPI bus @@ -27,6 +28,7 @@ void of_register_spi_devices(struct spi_master *master)const __be32 *prop;int rc;int len; +int ncs_pin;if (!master->dev.of_node)return ;@@ -50,15 +52,24 @@ void of_register_spi_devices(struct spi_master *master)continue ; } -/* Device address */ - prop =of_get_property (nc,"reg" , &len); -if (!prop || len <sizeof (*prop)) { -dev_err (&master->dev,"%s has no 'reg' property\n" , - nc->full_name); -spi_dev_put (spi); -continue ; +/* ncs gpio */ + ncs_pin =of_get_named_gpio (nc,"ncs-gpio" ,0 ); + +if (gpio_is_valid (ncs_pin)) { + spi->controller_data = (void *)ncs_pin; + spi->chip_select = master->num_chipselect; + master->num_chipselect++; + }else { +/* Device address */ + prop =of_get_property (nc,"reg" , &len); +if (!prop || len <sizeof (*prop)) { +dev_err (&master->dev,"%s has no 'reg' property\n" , + nc->full_name); +spi_dev_put (spi); +continue ; + } + spi->chip_select =be32_to_cpup (prop); } - spi->chip_select =be32_to_cpup (prop);/* Mode (clock phase/polarity/etc.) */ if (of_find_property (nc,"spi-cpha" ,NULL ))drivers/spi/spi.c +48
-3@@ -28,6 +28,7 @@#include <linux/mod_devicetable.h> #include <linux/spi/spi.h> #include <linux/of_spi.h> +#include <linux/of_gpio.h> #include <linux/pm_runtime.h> #include <linux/export.h> @@ -339,15 +340,16 @@ EXPORT_SYMBOL_GPL(spi_alloc_device);int spi_add_device (struct spi_device *spi) {static DEFINE_MUTEX (spi_add_lock); -struct device *dev = spi->master->dev.parent; +struct spi_master *master = spi->master; +struct device *dev = master->dev.parent;struct device *d;int status;/* Chipselects are numbered 0..max; validate. */ -if (spi->chip_select >= spi->master->num_chipselect) { +if (spi->chip_select >= master->num_chipselect) {dev_err (dev,"cs%d >= max %d\n" , spi->chip_select, - spi->master->num_chipselect); + master->num_chipselect);return -EINVAL ; }@@ -371,6 +373,13 @@ int spi_add_device(struct spi_device *spi) goto done; } +if (master->num_gpio_chipselect && + spi->chip_select >= master->first_gpio_chipselect) { +int num = spi->chip_select = master->first_gpio_chipselect; + + spi->controller_data = (void *)master->chipselect_gpios[num]; + } +/* Drivers may modify this initial i/o setup, but will * normally rely on the device being setup. Devices * using SPI_CS_HIGH can't coexist well otherwise... @@ -562,6 +571,38 @@ struct spi_master *spi_alloc_master(struct device *dev, unsigned size) }EXPORT_SYMBOL_GPL (spi_alloc_master); +static int of_spi_register_master (struct spi_master *master) +{ +int nb, i; +int *cs; +struct device_node *np = master->dev.of_node; + +if (!np) +return 0 ; + + nb =of_gpio_named_count (np,"ncs-gpios" ); + +if (nb <1 ) +return 0 ; + + master->chipselect_gpios =kzalloc (sizeof (int ) * nb,GFP_KERNEL ); + +if (!master->chipselect_gpios) +return -ENOMEM ; + + master->first_gpio_chipselect = master->num_chipselect; + master->num_chipselect += nb; + master->num_gpio_chipselect = nb; + +for (i =0 ; i < nb; i++) { + cs = &master->chipselect_gpios[i]; + + *cs =of_get_named_gpio (np,"ncs-gpios" , i); + } + +return 0 ; +} +/** * spi_register_master - register SPI master controller * @master: initialized master, originally from spi_alloc_master() @@ -593,6 +634,10 @@ int spi_register_master(struct spi_master *master)if (!dev)return -ENODEV ; + status =of_spi_register_master (master); +if (status) +return status; +/* even if it's just one always-selected device, there must * be at least one chipselect */ include/linux/spi/spi.h +5
-0@@ -318,6 +318,11 @@ struct spi_master {/* called on release() to free memory provided by spi_master */ void (*cleanup)(struct spi_device *spi); + +/* gpio chip select */ +int *chipselect_gpios; +int first_gpio_chipselect; +int num_gpio_chipselect; };static inline void *spi_master_get_devdata (struct spi_master *master)Signature · 1 line
1.7.7
PATCH 2/3 of_spi: add generic binding support to specify ncs gpio
Hi Grant,
can I have a feedback
the Atmel SPI depend on it
Best Regards,
J.
Quoted 226 lines · Jean-Christophe PLAGNIOL-VILLARD
Hi Grant,
ping
Best Regards,
J.Quoted 214 lines · Jean-Christophe PLAGNIOL-VILLARD
This will allow to use gpio for chip select with no modification in the driver binding
When use the ncs-gpios, the gpio number will be passed via the
controller_dataand the number of chip select will automatically increased.Signed-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>Cc devicetree-discuss at lists.ozlabs.orgCc spi-devel-general at lists.sourceforge.net--- Documentation/devicetree/bindings/spi/spi-bus.txt | 6 +++ drivers/of/of_spi.c | 27 ++++++++--- drivers/spi/spi.c | 51 +++++++++++++++++++- include/linux/spi/spi.h | 5 ++ 4 files changed, 78 insertions(+), 11 deletions(-)Documentation/devicetree/bindings/spi/spi-bus.txt +6
-0@@ -12,6 +12,7 @@ The SPI master node requires the following properties: - #size-cells - should be zero. - compatible - name of SPI bus controller following generic names recommended practice. +- ncs-gpios - (optional) gpios chip select. No other properties are required in the SPI bus node. It is assumed that a driver for an SPI bus device will understand that it is an SPI bus. However, the binding does not attempt to define the specific method for@@ -21,6 +22,8 @@ assumption that board specific platform code will be used to manage chip selects. Individual drivers can define additional properties to support describing the chip select layout. +If ncs-gpios is used the number of chip select will automatically increased. + SPI slave nodes must be children of the SPI master node and can contain the following properties. - reg - (required) chip select address of device.@@ -34,6 +37,9 @@ contain the following properties. - spi-cs-high - (optional) Empty property indicating device requires chip select active high +If a gpio chipselect is used for the SPI slave the gpio number will be passed +via the controller_data + SPI example for an MPC5200 SPI bus: spi at f00 { #address-cells = <1>;drivers/of/of_spi.c +19
-8@@ -12,6 +12,7 @@#include <linux/spi/spi.h> #include <linux/of_irq.h> #include <linux/of_spi.h> +#include <linux/of_gpio.h> /** * of_register_spi_devices - Register child devices onto the SPI bus @@ -27,6 +28,7 @@ void of_register_spi_devices(struct spi_master *master)const __be32 *prop;int rc;int len; +int ncs_pin;if (!master->dev.of_node)return ;@@ -50,15 +52,24 @@ void of_register_spi_devices(struct spi_master *master)continue ; } -/* Device address */ - prop =of_get_property (nc,"reg" , &len); -if (!prop || len <sizeof (*prop)) { -dev_err (&master->dev,"%s has no 'reg' property\n" , - nc->full_name); -spi_dev_put (spi); -continue ; +/* ncs gpio */ + ncs_pin =of_get_named_gpio (nc,"ncs-gpio" ,0 ); + +if (gpio_is_valid (ncs_pin)) { + spi->controller_data = (void *)ncs_pin; + spi->chip_select = master->num_chipselect; + master->num_chipselect++; + }else { +/* Device address */ + prop =of_get_property (nc,"reg" , &len); +if (!prop || len <sizeof (*prop)) { +dev_err (&master->dev,"%s has no 'reg' property\n" , + nc->full_name); +spi_dev_put (spi); +continue ; + } + spi->chip_select =be32_to_cpup (prop); } - spi->chip_select =be32_to_cpup (prop);/* Mode (clock phase/polarity/etc.) */ if (of_find_property (nc,"spi-cpha" ,NULL ))drivers/spi/spi.c +48
-3@@ -28,6 +28,7 @@#include <linux/mod_devicetable.h> #include <linux/spi/spi.h> #include <linux/of_spi.h> +#include <linux/of_gpio.h> #include <linux/pm_runtime.h> #include <linux/export.h> @@ -339,15 +340,16 @@ EXPORT_SYMBOL_GPL(spi_alloc_device);int spi_add_device (struct spi_device *spi) {static DEFINE_MUTEX (spi_add_lock); -struct device *dev = spi->master->dev.parent; +struct spi_master *master = spi->master; +struct device *dev = master->dev.parent;struct device *d;int status;/* Chipselects are numbered 0..max; validate. */ -if (spi->chip_select >= spi->master->num_chipselect) { +if (spi->chip_select >= master->num_chipselect) {dev_err (dev,"cs%d >= max %d\n" , spi->chip_select, - spi->master->num_chipselect); + master->num_chipselect);return -EINVAL ; }@@ -371,6 +373,13 @@ int spi_add_device(struct spi_device *spi) goto done; } +if (master->num_gpio_chipselect && + spi->chip_select >= master->first_gpio_chipselect) { +int num = spi->chip_select = master->first_gpio_chipselect; + + spi->controller_data = (void *)master->chipselect_gpios[num]; + } +/* Drivers may modify this initial i/o setup, but will * normally rely on the device being setup. Devices * using SPI_CS_HIGH can't coexist well otherwise... @@ -562,6 +571,38 @@ struct spi_master *spi_alloc_master(struct device *dev, unsigned size) }EXPORT_SYMBOL_GPL (spi_alloc_master); +static int of_spi_register_master (struct spi_master *master) +{ +int nb, i; +int *cs; +struct device_node *np = master->dev.of_node; + +if (!np) +return 0 ; + + nb =of_gpio_named_count (np,"ncs-gpios" ); + +if (nb <1 ) +return 0 ; + + master->chipselect_gpios =kzalloc (sizeof (int ) * nb,GFP_KERNEL ); + +if (!master->chipselect_gpios) +return -ENOMEM ; + + master->first_gpio_chipselect = master->num_chipselect; + master->num_chipselect += nb; + master->num_gpio_chipselect = nb; + +for (i =0 ; i < nb; i++) { + cs = &master->chipselect_gpios[i]; + + *cs =of_get_named_gpio (np,"ncs-gpios" , i); + } + +return 0 ; +} +/** * spi_register_master - register SPI master controller * @master: initialized master, originally from spi_alloc_master() @@ -593,6 +634,10 @@ int spi_register_master(struct spi_master *master)if (!dev)return -ENODEV ; + status =of_spi_register_master (master); +if (status) +return status; +/* even if it's just one always-selected device, there must * be at least one chipselect */ include/linux/spi/spi.h +5
-0@@ -318,6 +318,11 @@ struct spi_master {/* called on release() to free memory provided by spi_master */ void (*cleanup)(struct spi_device *spi); + +/* gpio chip select */ +int *chipselect_gpios; +int first_gpio_chipselect; +int num_gpio_chipselect; };static inline void *spi_master_get_devdata (struct spi_master *master)Signature · 1 line
1.7.7_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 3/3 spi/atmel: add DT support
In reply to Jean-Christophe PLAGNIOL-VILLARDthe atmel_spi use only gpio for chip select
--- .../devicetree/bindings/spi/spi_atmel.txt | 6 ++++++ drivers/spi/spi-atmel.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletions(-) create mode 100644 Documentation/devicetree/bindings/spi/spi_atmel.txt
Documentation/devicetree/bindings/spi/spi_atmel.txt new file +6 -0
@@ -0,0 +1,6 @@ +Atmel SPI device + +Required properties: +- compatible : should be "atmel,at91rm9200-spi". +- reg: Address and length of the register set for the device +- interrupts: Should contain macb interrupt
drivers/spi/spi-atmel.c +11 -1
@@ -19,6 +19,7 @@#include <linux/interrupt.h> #include <linux/spi/spi.h> #include <linux/slab.h> +#include <linux/of.h> #include <asm/io.h> #include <mach/board.h>
@@ -938,7 +939,7 @@ static int __devinit atmel_spi_probe(struct platform_device *pdev) master->mode_bits =SPI_CPOL |SPI_CPHA |SPI_CS_HIGH ; master->bus_num = pdev->id; - master->num_chipselect =4 ; + master->num_chipselect = master->dev.of_node ?0 :4 ; master->setup = atmel_spi_setup; master->transfer = atmel_spi_transfer; master->cleanup = atmel_spi_cleanup;
@@ -1064,11 +1065,20 @@ static int atmel_spi_resume(struct platform_device *pdev)#define atmel_spi_resume NULL#endif +#if defined(CONFIG_OF ) +static const struct of_device_id atmel_spi_dt_ids[] = { + { .compatible ="atmel,at91rm9200-spi" }, + {/* sentinel */ } +}; + +MODULE_DEVICE_TABLE (of, atmel_spi_dt_ids); +#endif static struct platform_driver atmel_spi_driver = { .driver = { .name ="atmel_spi" , .owner =THIS_MODULE , + .of_match_table =of_match_ptr (atmel_spi_dt_ids), }, .suspend = atmel_spi_suspend, .resume = atmel_spi_resume,
Signature · 1 line
1.7.7
PATCH 3/3 spi/atmel: add DT support
Quoted 5 lines · Jean-Christophe PLAGNIOL-VILLARD
the
atmel_spiuse only gpio for chip selectSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>Cc devicetree-discuss at lists.ozlabs.orgCc spi-devel-general at lists.sourceforge.net
Looks good to me; applied.
g.
Quoted 73 lines
--- .../devicetree/bindings/spi/spi_atmel.txt | 6 ++++++ drivers/spi/spi-atmel.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletions(-) create mode 100644 Documentation/devicetree/bindings/spi/spi_atmel.txtDocumentation/devicetree/bindings/spi/spi_atmel.txt new file +6
-0@@ -0,0 +1,6 @@ +Atmel SPI device + +Required properties: +- compatible : should be "atmel,at91rm9200-spi". +- reg: Address and length of the register set for the device +- interrupts: Should contain macb interruptdrivers/spi/spi-atmel.c +11
-1@@ -19,6 +19,7 @@#include <linux/interrupt.h> #include <linux/spi/spi.h> #include <linux/slab.h> +#include <linux/of.h> #include <asm/io.h> #include <mach/board.h> @@ -938,7 +939,7 @@ static int __devinit atmel_spi_probe(struct platform_device *pdev) master->mode_bits =SPI_CPOL |SPI_CPHA |SPI_CS_HIGH ; master->bus_num = pdev->id; - master->num_chipselect =4 ; + master->num_chipselect = master->dev.of_node ?0 :4 ; master->setup = atmel_spi_setup; master->transfer = atmel_spi_transfer; master->cleanup = atmel_spi_cleanup;@@ -1064,11 +1065,20 @@ static int atmel_spi_resume(struct platform_device *pdev)#define atmel_spi_resume NULL#endif +#if defined(CONFIG_OF ) +static const struct of_device_id atmel_spi_dt_ids[] = { + { .compatible ="atmel,at91rm9200-spi" }, + {/* sentinel */ } +}; + +MODULE_DEVICE_TABLE (of, atmel_spi_dt_ids); +#endif static struct platform_driver atmel_spi_driver = { .driver = { .name ="atmel_spi" , .owner =THIS_MODULE , + .of_match_table =of_match_ptr (atmel_spi_dt_ids), }, .suspend = atmel_spi_suspend, .resume = atmel_spi_resume,Signature · 12 lines
1.7.7 ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ spi-devel-general mailing list spi-devel-general at lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/spi-devel-general
Signature · 1 line
email sent from notmuch.vim plugin
PATCH 3/3 spi/atmel: add DT support
Quoted 8 lines · Grant Likely
Quoted 5 lines · Jean-Christophe PLAGNIOL-VILLARD
the
atmel_spiuse only gpio for chip selectSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>Cc devicetree-discuss at lists.ozlabs.orgCc spi-devel-general at lists.sourceforge.netLooks good to me; applied.
please wait it's need to patch that manage the cs-gpio
will resend a new version soon
Best Regards,
J.