Skip to contentSkip to conversation

spi: sh-msiof: Remove unneeded clock name

PATCH New Bastian Hecht 3 participants 10 messages Dec 12, 2012 – Dec 19, 2012

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH v2 1/4 spi: sh-msiof: Remove unneeded clock name

From: Bastian Hecht <[email protected]>

clk_get() no longer needs a character string for associating the right clock as this is done via the device struct now.

---
v2: no changes

 drivers/spi/spi-sh-msiof.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/spi/spi-sh-msiof.c +2 -4
index 1f466bc..96358d0 100644
@@ -597,7 +597,6 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)
 	struct resource	*r;
 	struct spi_master *master;
 	struct sh_msiof_spi_priv *p;
-	char clk_name[16];
 	int i;
 	int ret;
 
@@ -614,10 +613,9 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)
 	p->info = pdev->dev.platform_data;
 	init_completion(&p->done);
 
-	snprintf(clk_name, sizeof(clk_name), "msiof%d", pdev->id);
-	p->clk = clk_get(&pdev->dev, clk_name);
+	p->clk = clk_get(&pdev->dev, NULL);
 	if (IS_ERR(p->clk)) {
-		dev_err(&pdev->dev, "cannot get clock \"%s\"\n", clk_name);
+		dev_err(&pdev->dev, "cannot get clock\n");
 		ret = PTR_ERR(p->clk);
 		goto err1;
 	}
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v2 2/4 spi: Add SH Mobile series as dependency to MSIOF controller

From: Bastian Hecht <[email protected]>

The MSIOF hardware block is used in the SH Mobile series as well, so we add it here.

---
v2: no changes

 drivers/spi/Kconfig |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/spi/Kconfig +2 -2
index 1acae35..d0c0ae6 100644
@@ -341,10 +341,10 @@ config SPI_SC18IS602
 
 config SPI_SH_MSIOF
 	tristate "SuperH MSIOF SPI controller"
-	depends on SUPERH && HAVE_CLK
+	depends on (SUPERH || ARCH_SHMOBILE) && HAVE_CLK
 	select SPI_BITBANG
 	help
-	  SPI driver for SuperH MSIOF blocks.
+	  SPI driver for SuperH and SH Mobile MSIOF blocks.
 
 config SPI_SH
 	tristate "SuperH SPI controller"
Signature · 1 line
1.7.9.5
#3 lore raw

PATCH v2 3/4 spi: sh-msiof: Add device tree parsing to driver

In reply to Bastian Hecht

From: Bastian Hecht <[email protected]>

This adds the capability to retrieve setup data from the device tree node. The usage of platform data is still available.

---
v2:
- renamed property "chip_select" to "num-cs"
- renamed property "tx_fifo_size" to "renesas,tx-fifo-size"
- renamed property "rx_fifo_size" to "renesas,rx-fifo-size"

 drivers/spi/spi-sh-msiof.c |   56 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 55 insertions(+), 1 deletion(-)
drivers/spi/spi-sh-msiof.c +55 -1
index 96358d0..8b40d08 100644
@@ -20,6 +20,7 @@
 #include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 
@@ -592,6 +593,37 @@ static u32 sh_msiof_spi_txrx_word(struct spi_device *spi, unsigned nsecs,
 	return 0;
 }
 
+#ifdef CONFIG_OF
+static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
+{
+	struct sh_msiof_spi_info *info;
+	struct device_node *np = dev->of_node;
+	u32 num_cs = 0;
+
+	info = devm_kzalloc(dev, sizeof(struct sh_msiof_spi_info), GFP_KERNEL);
+	if (!info) {
+		dev_err(dev, "failed to allocate setup data\n");
+		return NULL;
+	}
+
+	/* Parse the MSIOF properties */
+	of_property_read_u32(np, "num-cs", &num_cs);
+	of_property_read_u32(np, "renesas,tx-fifo-size",
+					&info->tx_fifo_override);
+	of_property_read_u32(np, "renesas,rx-fifo-size",
+					&info->rx_fifo_override);
+
+	info->num_chipselect = num_cs;
+
+	return info;
+}
+#else
+static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
+{
+	return NULL;
+}
+#endif
+
 static int sh_msiof_spi_probe(struct platform_device *pdev)
 {
 	struct resource	*r;
@@ -610,7 +642,17 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)
 	p = spi_master_get_devdata(master);
 
 	platform_set_drvdata(pdev, p);
-	p->info = pdev->dev.platform_data;
+	if (pdev->dev.of_node)
+		p->info = sh_msiof_spi_parse_dt(&pdev->dev);
+	else
+		p->info = pdev->dev.platform_data;
+
+	if (!p->info) {
+		dev_err(&pdev->dev, "failed to obtain device info\n");
+		ret = -ENXIO;
+		goto err1;
+	}
+
 	init_completion(&p->done);
 
 	p->clk = clk_get(&pdev->dev, NULL);
@@ -715,6 +757,17 @@ static int sh_msiof_spi_runtime_nop(struct device *dev)
 	return 0;
 }
 
+#ifdef CONFIG_OF
+static const struct of_device_id sh_msiof_match[] = {
+	{ .compatible = "renesas,sh-msiof", },
+	{ .compatible = "renesas,sh-mobile-msiof", },
+	{},
+};
+MODULE_DEVICE_TABLE(of, sh_msiof_match);
+#else
+#define sh_msiof_match NULL
+#endif
+
 static struct dev_pm_ops sh_msiof_spi_dev_pm_ops = {
 	.runtime_suspend = sh_msiof_spi_runtime_nop,
 	.runtime_resume = sh_msiof_spi_runtime_nop,
@@ -727,6 +780,7 @@ static struct platform_driver sh_msiof_spi_drv = {
 		.name		= "spi_sh_msiof",
 		.owner		= THIS_MODULE,
 		.pm		= &sh_msiof_spi_dev_pm_ops,
+		.of_match_table = sh_msiof_match,
 	},
 };
 module_platform_driver(sh_msiof_spi_drv);
Signature · 1 line
1.7.9.5
#4 lore raw

PATCH v2 3/4 spi: sh-msiof: Add device tree parsing to driver

Hi, Bastian.

Quoted 88 lines · Bastian Hecht

From: Bastian Hecht <[email protected]>

This adds the capability to retrieve setup data from the device tree node. The usage of platform data is still available.

---
v2:
- renamed property "chip_select" to "num-cs"
- renamed property "tx_fifo_size" to "renesas,tx-fifo-size"
- renamed property "rx_fifo_size" to "renesas,rx-fifo-size"

 drivers/spi/spi-sh-msiof.c |   56 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 55 insertions(+), 1 deletion(-)
drivers/spi/spi-sh-msiof.c +43 -1
index 96358d0..8b40d08 100644
@@ -20,6 +20,7 @@
 #include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 
@@ -592,6 +593,37 @@ static u32 sh_msiof_spi_txrx_word(struct spi_device *spi, unsigned nsecs,
        return 0;
 }
 
+#ifdef CONFIG_OF
+static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
+{
+       struct sh_msiof_spi_info *info;
+       struct device_node *np = dev->of_node;
+       u32 num_cs = 0;
+
+       info = devm_kzalloc(dev, sizeof(struct sh_msiof_spi_info), GFP_KERNEL);
+       if (!info) {
+               dev_err(dev, "failed to allocate setup data\n");
+               return NULL;
+       }
+
+       /* Parse the MSIOF properties */
+       of_property_read_u32(np, "num-cs", &num_cs);
+       of_property_read_u32(np, "renesas,tx-fifo-size",
+                                       &info->tx_fifo_override);
+       of_property_read_u32(np, "renesas,rx-fifo-size",
+                                       &info->rx_fifo_override);
+
+       info->num_chipselect = num_cs;
+
+       return info;
+}
+#else
+static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
+{
+       return NULL;
+}
+#endif
+
 static int sh_msiof_spi_probe(struct platform_device *pdev)
 {
        struct resource *r;
@@ -610,7 +642,17 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)
        p = spi_master_get_devdata(master);
 
        platform_set_drvdata(pdev, p);
-       p->info = pdev->dev.platform_data;
+       if (pdev->dev.of_node)
+               p->info = sh_msiof_spi_parse_dt(&pdev->dev);
+       else
+               p->info = pdev->dev.platform_data;
+
+       if (!p->info) {
+               dev_err(&pdev->dev, "failed to obtain device info\n");
+               ret = -ENXIO;
+               goto err1;
+       }
+
        init_completion(&p->done);
 
        p->clk = clk_get(&pdev->dev, NULL);
@@ -715,6 +757,17 @@ static int sh_msiof_spi_runtime_nop(struct device *dev)
        return 0;
 }
 

drivers/spi/spi-sh-msiof.c static int sh_msiof_spi_runtime_nop(struct device *dev) · line 769

Quoted 10 lines
drivers/spi/spi-sh-msiof.c +10 -0
+#ifdef CONFIG_OF
+static const struct of_device_id sh_msiof_match[] = {
+       { .compatible = "renesas,sh-msiof", },
+       { .compatible = "renesas,sh-mobile-msiof", },
+       {},
+};
+MODULE_DEVICE_TABLE(of, sh_msiof_match);
+#else
+#define sh_msiof_match NULL
+#endif

You can remove ifdef if you use of_match_ptr().

drivers/spi/spi-sh-msiof.c static struct platform_driver sh_msiof_spi_drv = { · line 783

Quoted 9 lines
drivers/spi/spi-sh-msiof.c +2 -0
+
 static struct dev_pm_ops sh_msiof_spi_dev_pm_ops = {
        .runtime_suspend = sh_msiof_spi_runtime_nop,
        .runtime_resume = sh_msiof_spi_runtime_nop,
@@ -727,6 +780,7 @@ static struct platform_driver sh_msiof_spi_drv = {
                .name           = "spi_sh_msiof",
                .owner          = THIS_MODULE,
                .pm             = &sh_msiof_spi_dev_pm_ops,
+               .of_match_table = sh_msiof_match,

You can use of_match_ptr(sh_msiof_match).

Quoted 5 lines
drivers/spi/spi-sh-msiof.c +0 -1
        },
 };
 module_platform_driver(sh_msiof_spi_drv);
--

1.7.9.5

Best regards,
Nobuhiro

Signature · 3 lines
Nobuhiro Iwamatsu
   iwamatsu at {nigauri.org / debian.org}
   GPG ID: 40AD1FA6
#5 lore raw

PATCH v2 3/4 spi: sh-msiof: Add device tree parsing to driver

Hi Nobuhiro,

2012/12/17 Nobuhiro Iwamatsu <[email protected]>:

Quoted 104 lines

Hi, Bastian.

Quoted 88 lines · Bastian Hecht

From: Bastian Hecht <[email protected]>

This adds the capability to retrieve setup data from the device tree node. The usage of platform data is still available.

---
v2:
- renamed property "chip_select" to "num-cs"
- renamed property "tx_fifo_size" to "renesas,tx-fifo-size"
- renamed property "rx_fifo_size" to "renesas,rx-fifo-size"

 drivers/spi/spi-sh-msiof.c |   56 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 55 insertions(+), 1 deletion(-)
drivers/spi/spi-sh-msiof.c +43 -1
index 96358d0..8b40d08 100644
@@ -20,6 +20,7 @@
 #include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 
@@ -592,6 +593,37 @@ static u32 sh_msiof_spi_txrx_word(struct spi_device *spi, unsigned nsecs,
        return 0;
 }
 
+#ifdef CONFIG_OF
+static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
+{
+       struct sh_msiof_spi_info *info;
+       struct device_node *np = dev->of_node;
+       u32 num_cs = 0;
+
+       info = devm_kzalloc(dev, sizeof(struct sh_msiof_spi_info), GFP_KERNEL);
+       if (!info) {
+               dev_err(dev, "failed to allocate setup data\n");
+               return NULL;
+       }
+
+       /* Parse the MSIOF properties */
+       of_property_read_u32(np, "num-cs", &num_cs);
+       of_property_read_u32(np, "renesas,tx-fifo-size",
+                                       &info->tx_fifo_override);
+       of_property_read_u32(np, "renesas,rx-fifo-size",
+                                       &info->rx_fifo_override);
+
+       info->num_chipselect = num_cs;
+
+       return info;
+}
+#else
+static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
+{
+       return NULL;
+}
+#endif
+
 static int sh_msiof_spi_probe(struct platform_device *pdev)
 {
        struct resource *r;
@@ -610,7 +642,17 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)
        p = spi_master_get_devdata(master);
 
        platform_set_drvdata(pdev, p);
-       p->info = pdev->dev.platform_data;
+       if (pdev->dev.of_node)
+               p->info = sh_msiof_spi_parse_dt(&pdev->dev);
+       else
+               p->info = pdev->dev.platform_data;
+
+       if (!p->info) {
+               dev_err(&pdev->dev, "failed to obtain device info\n");
+               ret = -ENXIO;
+               goto err1;
+       }
+
        init_completion(&p->done);
 
        p->clk = clk_get(&pdev->dev, NULL);
@@ -715,6 +757,17 @@ static int sh_msiof_spi_runtime_nop(struct device *dev)
        return 0;
 }
 

drivers/spi/spi-sh-msiof.c static int sh_msiof_spi_runtime_nop(struct device *dev) · line 769

Quoted 10 lines
drivers/spi/spi-sh-msiof.c +10 -0
+#ifdef CONFIG_OF
+static const struct of_device_id sh_msiof_match[] = {
+       { .compatible = "renesas,sh-msiof", },
+       { .compatible = "renesas,sh-mobile-msiof", },
+       {},
+};
+MODULE_DEVICE_TABLE(of, sh_msiof_match);
+#else
+#define sh_msiof_match NULL
+#endif

You can remove ifdef if you use of_match_ptr().

Quoted 12 lines

drivers/spi/spi-sh-msiof.c static struct platform_driver sh_msiof_spi_drv = { · line 783

Quoted 9 lines
drivers/spi/spi-sh-msiof.c +2 -0
+
 static struct dev_pm_ops sh_msiof_spi_dev_pm_ops = {
        .runtime_suspend = sh_msiof_spi_runtime_nop,
        .runtime_resume = sh_msiof_spi_runtime_nop,
@@ -727,6 +780,7 @@ static struct platform_driver sh_msiof_spi_drv = {
                .name           = "spi_sh_msiof",
                .owner          = THIS_MODULE,
                .pm             = &sh_msiof_spi_dev_pm_ops,
+               .of_match_table = sh_msiof_match,

You can use of_match_ptr(sh_msiof_match).

Ok very nice, will do so.

Thanks,

Bastian

Quoted 13 lines
Quoted 5 lines
drivers/spi/spi-sh-msiof.c +0 -1
        },
 };
 module_platform_driver(sh_msiof_spi_drv);
--

1.7.9.5

Best regards,
Nobuhiro

--
Nobuhiro Iwamatsu
iwamatsu at {nigauri.org / debian.org}
GPG ID: 40AD1FA6

Applied
#6 lore raw

PATCH v2 3/4 spi: sh-msiof: Add device tree parsing to driver

Quoted 13 lines · Bastian Hecht

Hi Nobuhiro,

2012/12/17 Nobuhiro Iwamatsu <[email protected]>:

Quoted 10 lines

Hi, Bastian.

Quoted 7 lines · Bastian Hecht

From: Bastian Hecht <[email protected]>

This adds the capability to retrieve setup data from the device tree node. The usage of platform data is still available.

---

Applied, thanks.

Quoted 6 lines
Quoted 4 lines
Quoted 1 line

+ .of_match_table = sh_msiof_match,

You can use of_match_ptr(sh_msiof_match).

Ok very nice, will do so.

Please send a fixup patch for this change.

g.

#7 lore raw

PATCH v2 4/4 devicetree: Add Renesas SH Mobile MSIOF spi controller binding doc

In reply to Bastian Hecht

From: Bastian Hecht <[email protected]>

Add binding documentation for Renesas' MSIOF SPI controller.

---
v2:
- renamed property "chip_select" to "num-cs"
- renamed property "tx_fifo_size" to "renesas,tx-fifo-size"
- renamed property "rx_fifo_size" to "renesas,rx-fifo-size"

 Documentation/devicetree/bindings/spi/sh-msiof.txt |   12 ++++++++++++
 1 file changed, 12 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/spi/sh-msiof.txt
Documentation/devicetree/bindings/spi/sh-msiof.txt new file +12 -0
new file mode 100644
index 0000000..e622210
@@ -0,0 +1,12 @@
+Renesas MSIOF spi controller
+
+Required properties:
+- compatible : 	"renesas,sh-msiof" for SuperH or
+		"renesas,sh-mobile-msiof" for SH Mobile series
+- reg : Offset and length of the register set for the device
+- interrupts : interrupt line used by MSIOF
+
+Optional properties:
+- num-cs		: total number of chip-selects
+- renesas,tx-fifo-size	: Overrides the default tx fifo size given in words
+- renesas,rx-fifo-size	: Overrides the default rx fifo size given in words
Signature · 1 line
1.7.9.5
Applied
#8 lore raw

PATCH v2 4/4 devicetree: Add Renesas SH Mobile MSIOF spi controller binding doc

Quoted 5 lines · Bastian Hecht

From: Bastian Hecht <[email protected]>

Add binding documentation for Renesas' MSIOF SPI controller.

Applied, but squashed together with patch 3. I prefer to see documentation and code changes applied together.

g.

Signature · 2 lines
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies, Ltd.