Loading Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt 0 → 100644 +28 −0 Original line number Diff line number Diff line Synopsys DesignWare AMBA 2.0 Synchronous Serial Interface. Required properties: - compatible : "snps,dw-apb-ssi" - reg : The register base for the controller. - interrupts : One interrupt, used by the controller. - #address-cells : <1>, as required by generic SPI binding. - #size-cells : <0>, also as required by generic SPI binding. Optional properties: - cs-gpios : Specifies the gpio pis to be used for chipselects. - num-cs : The number of chipselects. If omitted, this will default to 4. Child nodes as per the generic SPI binding. Example: spi@fff00000 { compatible = "snps,dw-apb-ssi"; reg = <0xfff00000 0x1000>; interrupts = <0 154 4>; #address-cells = <1>; #size-cells = <0>; num-cs = <2>; cs-gpios = <&gpio0 13 0>, <&gpio0 14 0>; }; drivers/spi/spi-dw-mmio.c +18 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ #include <linux/spi/spi.h> #include <linux/scatterlist.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/of_platform.h> #include "spi-dw.h" Loading @@ -33,6 +35,7 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) struct dw_spi *dws; struct resource *mem; int ret; int num_cs; dwsmmio = devm_kzalloc(&pdev->dev, sizeof(struct dw_spi_mmio), GFP_KERNEL); Loading Loading @@ -68,9 +71,16 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) return ret; dws->bus_num = pdev->id; dws->num_cs = 4; dws->max_freq = clk_get_rate(dwsmmio->clk); num_cs = 4; if (pdev->dev.of_node) of_property_read_u32(pdev->dev.of_node, "num-cs", &num_cs); dws->num_cs = num_cs; if (pdev->dev.of_node) { int i; Loading Loading @@ -114,12 +124,19 @@ static int dw_spi_mmio_remove(struct platform_device *pdev) return 0; } static const struct of_device_id dw_spi_mmio_of_match[] = { { .compatible = "snps,dw-apb-ssi", }, { /* end of table */} }; MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match); static struct platform_driver dw_spi_mmio_driver = { .probe = dw_spi_mmio_probe, .remove = dw_spi_mmio_remove, .driver = { .name = DRIVER_NAME, .owner = THIS_MODULE, .of_match_table = dw_spi_mmio_of_match, }, }; module_platform_driver(dw_spi_mmio_driver); Loading Loading
Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt 0 → 100644 +28 −0 Original line number Diff line number Diff line Synopsys DesignWare AMBA 2.0 Synchronous Serial Interface. Required properties: - compatible : "snps,dw-apb-ssi" - reg : The register base for the controller. - interrupts : One interrupt, used by the controller. - #address-cells : <1>, as required by generic SPI binding. - #size-cells : <0>, also as required by generic SPI binding. Optional properties: - cs-gpios : Specifies the gpio pis to be used for chipselects. - num-cs : The number of chipselects. If omitted, this will default to 4. Child nodes as per the generic SPI binding. Example: spi@fff00000 { compatible = "snps,dw-apb-ssi"; reg = <0xfff00000 0x1000>; interrupts = <0 154 4>; #address-cells = <1>; #size-cells = <0>; num-cs = <2>; cs-gpios = <&gpio0 13 0>, <&gpio0 14 0>; };
drivers/spi/spi-dw-mmio.c +18 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ #include <linux/spi/spi.h> #include <linux/scatterlist.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/of_platform.h> #include "spi-dw.h" Loading @@ -33,6 +35,7 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) struct dw_spi *dws; struct resource *mem; int ret; int num_cs; dwsmmio = devm_kzalloc(&pdev->dev, sizeof(struct dw_spi_mmio), GFP_KERNEL); Loading Loading @@ -68,9 +71,16 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) return ret; dws->bus_num = pdev->id; dws->num_cs = 4; dws->max_freq = clk_get_rate(dwsmmio->clk); num_cs = 4; if (pdev->dev.of_node) of_property_read_u32(pdev->dev.of_node, "num-cs", &num_cs); dws->num_cs = num_cs; if (pdev->dev.of_node) { int i; Loading Loading @@ -114,12 +124,19 @@ static int dw_spi_mmio_remove(struct platform_device *pdev) return 0; } static const struct of_device_id dw_spi_mmio_of_match[] = { { .compatible = "snps,dw-apb-ssi", }, { /* end of table */} }; MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match); static struct platform_driver dw_spi_mmio_driver = { .probe = dw_spi_mmio_probe, .remove = dw_spi_mmio_remove, .driver = { .name = DRIVER_NAME, .owner = THIS_MODULE, .of_match_table = dw_spi_mmio_of_match, }, }; module_platform_driver(dw_spi_mmio_driver); Loading