Skip to contentSkip to conversation

mfd: Fix compile for twl-core.c by removing cpu_is_omap usage

PATCH In review Tony Lindgren 5 participants 9 messages Sep 17, 2012 – Sep 18, 2012

Subsystems (5)
lore
Share & tools
lore

Tony Lindgren

author maintainer
#0 lore raw

PATCH 1/1 mfd: Fix compile for twl-core.c by removing cpu_is_omap usage

Commit 7d7e1eba (ARM: OMAP2+: Prepare for irqs.h removal) broke compile for non-omap as include plat/cpu.h was added:

drivers/mfd/twl-core.c:49:22: fatal error: plat/cpu.h: No such file or directory

This header was indirectly included earlier when SPARSE_IRQ was not set, but does not exist on most platforms.

Fix the problem by removing the cpu_is_omap usage that should not exist in drivers at all. We can do this by adding proper clock aliases for the twl-core.c drivers, and drop separate handling for cases when clock framework is not available as the behaviour will stay the same.

Note that we need to add a platform device to avoid using the i2c provided names that may be different on various omaps.

---

Samuel, I'd like to queue this via arm-soc as that's where I have the breaking patch is if this patch is OK with you.

arch/arm/mach-omap2/clock2430_data.c +1 -0
@@ -1856,6 +1856,7 @@ static struct omap_clk omap2430_clks[] = {
 	CLK(NULL,	"func_32k_ck",	&func_32k_ck,	CK_243X),
 	CLK(NULL,	"secure_32k_ck", &secure_32k_ck, CK_243X),
 	CLK(NULL,	"osc_ck",	&osc_ck,	CK_243X),
+	CLK("twl",	"fck",		&osc_ck,	CK_243X),
 	CLK(NULL,	"sys_ck",	&sys_ck,	CK_243X),
 	CLK(NULL,	"alt_ck",	&alt_ck,	CK_243X),
 	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_243X),
arch/arm/mach-omap2/clock3xxx_data.c +1 -0
@@ -3226,6 +3226,7 @@ static struct omap_clk omap3xxx_clks[] = {
 	CLK(NULL,	"virt_26000000_ck",	&virt_26000000_ck,	CK_3XXX),
 	CLK(NULL,	"virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX),
 	CLK(NULL,	"osc_sys_ck",	&osc_sys_ck,	CK_3XXX),
+	CLK("twl",	"fck",		&osc_sys_ck,	CK_3XXX),
 	CLK(NULL,	"sys_ck",	&sys_ck,	CK_3XXX),
 	CLK(NULL,	"sys_altclk",	&sys_altclk,	CK_3XXX),
 	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_3XXX),
drivers/mfd/twl-core.c +30 -26

114 lines not on this page · raw message

Acked-by on v1 1/1
#1 lore raw
Quoted 17 lines · Tony Lindgren

Commit 7d7e1eba (ARM: OMAP2+: Prepare for irqs.h removal) broke compile for non-omap as include plat/cpu.h was added:

drivers/mfd/twl-core.c:49:22: fatal error: plat/cpu.h: No such file or directory

This header was indirectly included earlier when SPARSE_IRQ was not set, but does not exist on most platforms.

Fix the problem by removing the cpu_is_omap usage that should not exist in drivers at all. We can do this by adding proper clock aliases for the twl-core.c drivers, and drop separate handling for cases when clock framework is not available as the behaviour will stay the same.

Note that we need to add a platform device to avoid using the i2c provided names that may be different on various omaps.

Quoted 7 lines
maintainer
#2 lore raw
In reply to Tony Lindgren
Quoted 25 lines · Tony Lindgren

Commit 7d7e1eba (ARM: OMAP2+: Prepare for irqs.h removal) broke compile for non-omap as include plat/cpu.h was added:

drivers/mfd/twl-core.c:49:22: fatal error: plat/cpu.h: No such file or directory

This header was indirectly included earlier when SPARSE_IRQ was not set, but does not exist on most platforms.

Fix the problem by removing the cpu_is_omap usage that should not exist in drivers at all. We can do this by adding proper clock aliases for the twl-core.c drivers, and drop separate handling for cases when clock framework is not available as the behaviour will stay the same.

Note that we need to add a platform device to avoid using the i2c provided names that may be different on various omaps.

Quoted 4 lines

---

Samuel, I'd like to queue this via arm-soc as that's where I have the breaking patch is if this patch is OK with you.

It would be ideal if I could queue this one, due to the clock dependency. Still hoping that we can get the CCF conversion patches in for 3.7.

- Paul

author maintainer
#3 lore raw
Quoted 27 lines · Paul Walmsley
Quoted 25 lines · Tony Lindgren

Commit 7d7e1eba (ARM: OMAP2+: Prepare for irqs.h removal) broke compile for non-omap as include plat/cpu.h was added:

drivers/mfd/twl-core.c:49:22: fatal error: plat/cpu.h: No such file or directory

This header was indirectly included earlier when SPARSE_IRQ was not set, but does not exist on most platforms.

Fix the problem by removing the cpu_is_omap usage that should not exist in drivers at all. We can do this by adding proper clock aliases for the twl-core.c drivers, and drop separate handling for cases when clock framework is not available as the behaviour will stay the same.

Note that we need to add a platform device to avoid using the i2c provided names that may be different on various omaps.

Quoted 7 lines
Quoted 4 lines

---

Samuel, I'd like to queue this via arm-soc as that's where I have the breaking patch is if this patch is OK with you.

It would be ideal if I could queue this one, due to the clock dependency. Still hoping that we can get the CCF conversion patches in for 3.7.

We need to queue this ASAP and before other patches to fix the build breakage in linux next. Then you can merge in that commit too, does that work for you?

Tony

maintainer
#4 lore raw
Quoted 3 lines · Tony Lindgren

We need to queue this ASAP and before other patches to fix the build breakage in linux next. Then you can merge in that commit too, does that work for you?

That's fine, we'll just need a stable commit then that the CCF patches can be based on.

- Paul

author maintainer
#5 lore raw
Quoted 8 lines · Paul Walmsley
Quoted 3 lines · Tony Lindgren

We need to queue this ASAP and before other patches to fix the build breakage in linux next. Then you can merge in that commit too, does that work for you?

That's fine, we'll just need a stable commit then that the CCF patches can be based on.

OK cool, will let you know that once we hear from Samuel. Care to ack the clock related changes?

There's pm24xx.c at least using osc_ck naming, so I added a new alias to keep it generic for the driver instead of using omap specific names.

Regards,

Tony

author maintainer
#6 lore raw
Quoted 10 lines · Tony Lindgren
Quoted 8 lines · Paul Walmsley
Quoted 3 lines · Tony Lindgren

We need to queue this ASAP and before other patches to fix the build breakage in linux next. Then you can merge in that commit too, does that work for you?

That's fine, we'll just need a stable commit then that the CCF patches can be based on.

Quoted 6 lines

OK cool, will let you know that once we hear from Samuel. Care to ack the clock related changes?

There's pm24xx.c at least using osc_ck naming, so I added a new alias to keep it generic for the driver instead of using omap specific names.

Pushed out now with the ack from Samuel and sent the pull request.

Regards,

Tony

Acked-by on v1 1/1
#7 lore raw
In reply to Tony Lindgren

Hi Tony,

Quoted 25 lines · Tony Lindgren

Commit 7d7e1eba (ARM: OMAP2+: Prepare for irqs.h removal) broke compile for non-omap as include plat/cpu.h was added:

drivers/mfd/twl-core.c:49:22: fatal error: plat/cpu.h: No such file or directory

This header was indirectly included earlier when SPARSE_IRQ was not set, but does not exist on most platforms.

Fix the problem by removing the cpu_is_omap usage that should not exist in drivers at all. We can do this by adding proper clock aliases for the twl-core.c drivers, and drop separate handling for cases when clock framework is not available as the behaviour will stay the same.

Note that we need to add a platform device to avoid using the i2c provided names that may be different on various omaps.

Quoted 4 lines

---

Samuel, I'd like to queue this via arm-soc as that's where I have the breaking patch is if this patch is OK with you.

That's fine with me:

Cheers,
Samuel.

Signature · 2 lines
Intel Open Source Technology Centre
http://oss.intel.com/
Reviewed-by on v1 1/1
#8 lore raw
In reply to Tony Lindgren
Quoted 17 lines · Tony Lindgren

Commit 7d7e1eba (ARM: OMAP2+: Prepare for irqs.h removal) broke compile for non-omap as include plat/cpu.h was added:

drivers/mfd/twl-core.c:49:22: fatal error: plat/cpu.h: No such file or directory

This header was indirectly included earlier when SPARSE_IRQ was not set, but does not exist on most platforms.

Fix the problem by removing the cpu_is_omap usage that should not exist in drivers at all. We can do this by adding proper clock aliases for the twl-core.c drivers, and drop separate handling for cases when clock framework is not available as the behaviour will stay the same.

Note that we need to add a platform device to avoid using the i2c provided names that may be different on various omaps.

Quoted 7 lines

FWIW:

Quoted 148 lines

---

Samuel, I'd like to queue this via arm-soc as that's where I have the breaking patch is if this patch is OK with you.

arch/arm/mach-omap2/clock2430_data.c +1 -0
@@ -1856,6 +1856,7 @@ static struct omap_clk omap2430_clks[] = {
 	CLK(NULL,	"func_32k_ck",	&func_32k_ck,	CK_243X),
 	CLK(NULL,	"secure_32k_ck", &secure_32k_ck, CK_243X),
 	CLK(NULL,	"osc_ck",	&osc_ck,	CK_243X),
+	CLK("twl",	"fck",		&osc_ck,	CK_243X),
 	CLK(NULL,	"sys_ck",	&sys_ck,	CK_243X),
 	CLK(NULL,	"alt_ck",	&alt_ck,	CK_243X),
 	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_243X),
arch/arm/mach-omap2/clock3xxx_data.c +1 -0
@@ -3226,6 +3226,7 @@ static struct omap_clk omap3xxx_clks[] = {
 	CLK(NULL,	"virt_26000000_ck",	&virt_26000000_ck,	CK_3XXX),
 	CLK(NULL,	"virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX),
 	CLK(NULL,	"osc_sys_ck",	&osc_sys_ck,	CK_3XXX),
+	CLK("twl",	"fck",		&osc_sys_ck,	CK_3XXX),
 	CLK(NULL,	"sys_ck",	&sys_ck,	CK_3XXX),
 	CLK(NULL,	"sys_altclk",	&sys_altclk,	CK_3XXX),
 	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_3XXX),
drivers/mfd/twl-core.c +30 -26
@@ -46,8 +46,6 @@
 #include <linux/i2c.h>
 #include <linux/i2c/twl.h>
 
-#include <plat/cpu.h>
-
 #include "twl-core.h"
 
 /*
@@ -1134,12 +1132,7 @@ static void clocks_init(struct device *dev,
 	u32 rate;
 	u8 ctrl = HFCLK_FREQ_26_MHZ;
 
-#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
-	if (cpu_is_omap2430())
-		osc = clk_get(dev, "osc_ck");
-	else
-		osc = clk_get(dev, "osc_sys_ck");
-
+	osc = clk_get(dev, "fck");
 	if (IS_ERR(osc)) {
 		printk(KERN_WARNING "Skipping twl internal clock init and "
 				"using bootloader value (unknown osc rate)\n");
@@ -1149,18 +1142,6 @@ static void clocks_init(struct device *dev,
 	rate = clk_get_rate(osc);
 	clk_put(osc);
 
-#else
-	/* REVISIT for non-OMAP systems, pass the clock rate from
-	 * board init code, using platform_data.
-	 */
-	osc = ERR_PTR(-EIO);
-
-	printk(KERN_WARNING "Skipping twl internal clock init and "
-	       "using bootloader value (unknown osc rate)\n");
-
-	return;
-#endif
-
 	switch (rate) {
 	case 19200000:
 		ctrl = HFCLK_FREQ_19p2_MHZ;
@@ -1222,10 +1203,23 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 {
 	struct twl4030_platform_data	*pdata = client->dev.platform_data;
 	struct device_node		*node = client->dev.of_node;
+	struct platform_device		*pdev;
 	int				irq_base = 0;
 	int				status;
 	unsigned			i, num_slaves;
 
+	pdev = platform_device_alloc(DRIVER_NAME, -1);
+	if (!pdev) {
+		dev_err(&client->dev, "can't alloc pdev\n");
+		return -ENOMEM;
+	}
+
+	status = platform_device_add(pdev);
+	if (status) {
+		platform_device_put(pdev);
+		return status;
+	}
+
 	if (node && !pdata) {
 		/*
 		 * XXX: Temporary pdata until the information is correctly
@@ -1234,23 +1228,30 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		pdata = devm_kzalloc(&client->dev,
 				     sizeof(struct twl4030_platform_data),
 				     GFP_KERNEL);
-		if (!pdata)
-			return -ENOMEM;
+		if (!pdata) {
+			status = -ENOMEM;
+			goto free;
+		}
 	}
 
 	if (!pdata) {
 		dev_dbg(&client->dev, "no platform data?\n");
-		return -EINVAL;
+		status = -EINVAL;
+		goto free;
 	}
 
+	platform_set_drvdata(pdev, pdata);
+
 	if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C) == 0) {
 		dev_dbg(&client->dev, "can't talk I2C?\n");
-		return -EIO;
+		status = -EIO;
+		goto free;
 	}
 
 	if (inuse) {
 		dev_dbg(&client->dev, "driver is already in use\n");
-		return -EBUSY;
+		status = -EBUSY;
+		goto free;
 	}
 
 	if ((id->driver_data) & TWL6030_CLASS) {
@@ -1285,7 +1286,7 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	inuse = true;
 
 	/* setup clock framework */
-	clocks_init(&client->dev, pdata->clock);
+	clocks_init(&pdev->dev, pdata->clock);
 
 	/* read TWL IDCODE Register */
 	if (twl_id == TWL4030_CLASS_ID) {
@@ -1335,6 +1336,9 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 fail:
 	if (status < 0)
 		twl_remove(client);
+free:
+	if (status < 0)
+		platform_device_unregister(pdev);
 
 	return status;
 }
Signature · 8 lines
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120918/6a13f455/attachment.sig>