Commit 7b4bc079 authored by Tony Lindgren's avatar Tony Lindgren

Merge tag 'omap-cleanup-a-for-3.9' of...

Merge tag 'omap-cleanup-a-for-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/pjw/omap-pending into omap-for-v3.9/pm

Remove some dead OMAP clock and device integration code and data.
Also, clean up the way that the OMAP device integration code blocks
WFI/WFE to use a consistent mechanism, controlled by a data flag.

Basic test logs for this branch are here:

   http://www.pwsan.com/omap/testlogs/cleanup_a_3.9/20130126014242/
parents 949db153 aff2f7d9
...@@ -63,7 +63,7 @@ static int __init omap_davinci_emac_dev_init(struct omap_hwmod *oh, ...@@ -63,7 +63,7 @@ static int __init omap_davinci_emac_dev_init(struct omap_hwmod *oh,
struct platform_device *pdev; struct platform_device *pdev;
pdev = omap_device_build(oh->class->name, 0, oh, pdata, pdata_len, pdev = omap_device_build(oh->class->name, 0, oh, pdata, pdata_len,
NULL, 0, false); false);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
WARN(1, "Can't build omap_device for %s:%s.\n", WARN(1, "Can't build omap_device for %s:%s.\n",
oh->class->name, oh->name); oh->class->name, oh->name);
......
...@@ -622,15 +622,10 @@ static struct clk_hw_omap gpios_fck_hw = { ...@@ -622,15 +622,10 @@ static struct clk_hw_omap gpios_fck_hw = {
DEFINE_STRUCT_CLK(gpios_fck, gpios_fck_parent_names, aes_ick_ops); DEFINE_STRUCT_CLK(gpios_fck, gpios_fck_parent_names, aes_ick_ops);
static struct clk wu_l4_ick;
DEFINE_STRUCT_CLK_HW_OMAP(wu_l4_ick, "wkup_clkdm");
DEFINE_STRUCT_CLK(wu_l4_ick, dpll_ck_parent_names, core_ck_ops);
static struct clk gpios_ick; static struct clk gpios_ick;
static const char *gpios_ick_parent_names[] = { static const char *gpios_ick_parent_names[] = {
"wu_l4_ick", "sys_ck",
}; };
static struct clk_hw_omap gpios_ick_hw = { static struct clk_hw_omap gpios_ick_hw = {
...@@ -1682,13 +1677,6 @@ static struct clk_hw_omap wdt1_ick_hw = { ...@@ -1682,13 +1677,6 @@ static struct clk_hw_omap wdt1_ick_hw = {
DEFINE_STRUCT_CLK(wdt1_ick, gpios_ick_parent_names, aes_ick_ops); DEFINE_STRUCT_CLK(wdt1_ick, gpios_ick_parent_names, aes_ick_ops);
static struct clk wdt1_osc_ck;
static const struct clk_ops wdt1_osc_ck_ops = {};
DEFINE_STRUCT_CLK_HW_OMAP(wdt1_osc_ck, NULL);
DEFINE_STRUCT_CLK(wdt1_osc_ck, sys_ck_parent_names, wdt1_osc_ck_ops);
static struct clk wdt3_fck; static struct clk wdt3_fck;
static struct clk_hw_omap wdt3_fck_hw = { static struct clk_hw_omap wdt3_fck_hw = {
...@@ -1767,7 +1755,6 @@ static struct omap_clk omap2420_clks[] = { ...@@ -1767,7 +1755,6 @@ static struct omap_clk omap2420_clks[] = {
CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X), CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X),
CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X), CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X),
CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X), CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X),
CLK(NULL, "ck_wdt1_osc", &wdt1_osc_ck, CK_242X),
CLK(NULL, "sys_clkout_src", &sys_clkout_src, CK_242X), CLK(NULL, "sys_clkout_src", &sys_clkout_src, CK_242X),
CLK(NULL, "sys_clkout", &sys_clkout, CK_242X), CLK(NULL, "sys_clkout", &sys_clkout, CK_242X),
CLK(NULL, "sys_clkout2_src", &sys_clkout2_src, CK_242X), CLK(NULL, "sys_clkout2_src", &sys_clkout2_src, CK_242X),
...@@ -1797,7 +1784,6 @@ static struct omap_clk omap2420_clks[] = { ...@@ -1797,7 +1784,6 @@ static struct omap_clk omap2420_clks[] = {
/* L4 domain clocks */ /* L4 domain clocks */
CLK(NULL, "l4_ck", &l4_ck, CK_242X), CLK(NULL, "l4_ck", &l4_ck, CK_242X),
CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X), CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X),
CLK(NULL, "wu_l4_ick", &wu_l4_ick, CK_242X),
/* virtual meta-group clock */ /* virtual meta-group clock */
CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X), CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X),
/* general l4 interface ck, multi-parent functional clk */ /* general l4 interface ck, multi-parent functional clk */
......
...@@ -601,15 +601,10 @@ static struct clk_hw_omap gpios_fck_hw = { ...@@ -601,15 +601,10 @@ static struct clk_hw_omap gpios_fck_hw = {
DEFINE_STRUCT_CLK(gpios_fck, gpio5_fck_parent_names, aes_ick_ops); DEFINE_STRUCT_CLK(gpios_fck, gpio5_fck_parent_names, aes_ick_ops);
static struct clk wu_l4_ick;
DEFINE_STRUCT_CLK_HW_OMAP(wu_l4_ick, "wkup_clkdm");
DEFINE_STRUCT_CLK(wu_l4_ick, dpll_ck_parent_names, core_ck_ops);
static struct clk gpios_ick; static struct clk gpios_ick;
static const char *gpios_ick_parent_names[] = { static const char *gpios_ick_parent_names[] = {
"wu_l4_ick", "sys_ck",
}; };
static struct clk_hw_omap gpios_ick_hw = { static struct clk_hw_omap gpios_ick_hw = {
...@@ -1811,13 +1806,6 @@ static struct clk_hw_omap wdt1_ick_hw = { ...@@ -1811,13 +1806,6 @@ static struct clk_hw_omap wdt1_ick_hw = {
DEFINE_STRUCT_CLK(wdt1_ick, gpios_ick_parent_names, aes_ick_ops); DEFINE_STRUCT_CLK(wdt1_ick, gpios_ick_parent_names, aes_ick_ops);
static struct clk wdt1_osc_ck;
static const struct clk_ops wdt1_osc_ck_ops = {};
DEFINE_STRUCT_CLK_HW_OMAP(wdt1_osc_ck, NULL);
DEFINE_STRUCT_CLK(wdt1_osc_ck, sys_ck_parent_names, wdt1_osc_ck_ops);
static struct clk wdt4_fck; static struct clk wdt4_fck;
static struct clk_hw_omap wdt4_fck_hw = { static struct clk_hw_omap wdt4_fck_hw = {
...@@ -1869,7 +1857,6 @@ static struct omap_clk omap2430_clks[] = { ...@@ -1869,7 +1857,6 @@ static struct omap_clk omap2430_clks[] = {
CLK(NULL, "func_96m_ck", &func_96m_ck, CK_243X), CLK(NULL, "func_96m_ck", &func_96m_ck, CK_243X),
CLK(NULL, "func_48m_ck", &func_48m_ck, CK_243X), CLK(NULL, "func_48m_ck", &func_48m_ck, CK_243X),
CLK(NULL, "func_12m_ck", &func_12m_ck, CK_243X), CLK(NULL, "func_12m_ck", &func_12m_ck, CK_243X),
CLK(NULL, "ck_wdt1_osc", &wdt1_osc_ck, CK_243X),
CLK(NULL, "sys_clkout_src", &sys_clkout_src, CK_243X), CLK(NULL, "sys_clkout_src", &sys_clkout_src, CK_243X),
CLK(NULL, "sys_clkout", &sys_clkout, CK_243X), CLK(NULL, "sys_clkout", &sys_clkout, CK_243X),
CLK(NULL, "emul_ck", &emul_ck, CK_243X), CLK(NULL, "emul_ck", &emul_ck, CK_243X),
...@@ -1898,7 +1885,6 @@ static struct omap_clk omap2430_clks[] = { ...@@ -1898,7 +1885,6 @@ static struct omap_clk omap2430_clks[] = {
/* L4 domain clocks */ /* L4 domain clocks */
CLK(NULL, "l4_ck", &l4_ck, CK_243X), CLK(NULL, "l4_ck", &l4_ck, CK_243X),
CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_243X), CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_243X),
CLK(NULL, "wu_l4_ick", &wu_l4_ick, CK_243X),
/* virtual meta-group clock */ /* virtual meta-group clock */
CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_243X), CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_243X),
/* general l4 interface ck, multi-parent functional clk */ /* general l4 interface ck, multi-parent functional clk */
......
This diff is collapsed.
...@@ -61,8 +61,7 @@ static int __init omap3_l3_init(void) ...@@ -61,8 +61,7 @@ static int __init omap3_l3_init(void)
if (!oh) if (!oh)
pr_err("could not look up %s\n", oh_name); pr_err("could not look up %s\n", oh_name);
pdev = omap_device_build("omap_l3_smx", 0, oh, NULL, 0, pdev = omap_device_build("omap_l3_smx", 0, oh, NULL, 0);
NULL, 0, 0);
WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name); WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);
...@@ -96,8 +95,7 @@ static int __init omap4_l3_init(void) ...@@ -96,8 +95,7 @@ static int __init omap4_l3_init(void)
pr_err("could not look up %s\n", oh_name); pr_err("could not look up %s\n", oh_name);
} }
pdev = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL, pdev = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL, 0);
0, NULL, 0, 0);
WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name); WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);
...@@ -273,7 +271,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data ...@@ -273,7 +271,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data
keypad_data = sdp4430_keypad_data; keypad_data = sdp4430_keypad_data;
pdev = omap_device_build(name, id, oh, keypad_data, pdev = omap_device_build(name, id, oh, keypad_data,
sizeof(struct omap4_keypad_platform_data), NULL, 0, 0); sizeof(struct omap4_keypad_platform_data));
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
WARN(1, "Can't build omap_device for %s:%s.\n", WARN(1, "Can't build omap_device for %s:%s.\n",
...@@ -297,7 +295,7 @@ static inline void __init omap_init_mbox(void) ...@@ -297,7 +295,7 @@ static inline void __init omap_init_mbox(void)
return; return;
} }
pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0, NULL, 0, 0); pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0);
WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n", WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n",
__func__, PTR_ERR(pdev)); __func__, PTR_ERR(pdev));
} }
...@@ -337,7 +335,7 @@ static void __init omap_init_mcpdm(void) ...@@ -337,7 +335,7 @@ static void __init omap_init_mcpdm(void)
return; return;
} }
pdev = omap_device_build("omap-mcpdm", -1, oh, NULL, 0, NULL, 0, 0); pdev = omap_device_build("omap-mcpdm", -1, oh, NULL, 0);
WARN(IS_ERR(pdev), "Can't build omap_device for omap-mcpdm.\n"); WARN(IS_ERR(pdev), "Can't build omap_device for omap-mcpdm.\n");
} }
#else #else
...@@ -358,7 +356,7 @@ static void __init omap_init_dmic(void) ...@@ -358,7 +356,7 @@ static void __init omap_init_dmic(void)
return; return;
} }
pdev = omap_device_build("omap-dmic", -1, oh, NULL, 0, NULL, 0, 0); pdev = omap_device_build("omap-dmic", -1, oh, NULL, 0);
WARN(IS_ERR(pdev), "Can't build omap_device for omap-dmic.\n"); WARN(IS_ERR(pdev), "Can't build omap_device for omap-dmic.\n");
} }
#else #else
...@@ -384,8 +382,7 @@ static void __init omap_init_hdmi_audio(void) ...@@ -384,8 +382,7 @@ static void __init omap_init_hdmi_audio(void)
return; return;
} }
pdev = omap_device_build("omap-hdmi-audio-dai", pdev = omap_device_build("omap-hdmi-audio-dai", -1, oh, NULL, 0, 0);
-1, oh, NULL, 0, NULL, 0, 0);
WARN(IS_ERR(pdev), WARN(IS_ERR(pdev),
"Can't build omap_device for omap-hdmi-audio-dai.\n"); "Can't build omap_device for omap-hdmi-audio-dai.\n");
...@@ -429,8 +426,7 @@ static int __init omap_mcspi_init(struct omap_hwmod *oh, void *unused) ...@@ -429,8 +426,7 @@ static int __init omap_mcspi_init(struct omap_hwmod *oh, void *unused)
} }
spi_num++; spi_num++;
pdev = omap_device_build(name, spi_num, oh, pdata, pdev = omap_device_build(name, spi_num, oh, pdata, sizeof(*pdata));
sizeof(*pdata), NULL, 0, 0);
WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s\n", WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s\n",
name, oh->name); name, oh->name);
kfree(pdata); kfree(pdata);
...@@ -460,7 +456,7 @@ static void omap_init_rng(void) ...@@ -460,7 +456,7 @@ static void omap_init_rng(void)
if (!oh) if (!oh)
return; return;
pdev = omap_device_build("omap_rng", -1, oh, NULL, 0, NULL, 0, 0); pdev = omap_device_build("omap_rng", -1, oh, NULL, 0);
WARN(IS_ERR(pdev), "Can't build omap_device for omap_rng\n"); WARN(IS_ERR(pdev), "Can't build omap_device for omap_rng\n");
} }
...@@ -689,8 +685,7 @@ static void __init omap_init_ocp2scp(void) ...@@ -689,8 +685,7 @@ static void __init omap_init_ocp2scp(void)
pdata->dev_cnt = dev_cnt; pdata->dev_cnt = dev_cnt;
pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata), NULL, pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata));
0, false);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("Could not build omap_device for %s %s\n", pr_err("Could not build omap_device for %s %s\n",
name, oh_name); name, oh_name);
......
...@@ -226,7 +226,7 @@ static struct platform_device *create_dss_pdev(const char *pdev_name, ...@@ -226,7 +226,7 @@ static struct platform_device *create_dss_pdev(const char *pdev_name,
dev_set_name(&pdev->dev, "%s", pdev->name); dev_set_name(&pdev->dev, "%s", pdev->name);
ohs[0] = oh; ohs[0] = oh;
od = omap_device_alloc(pdev, ohs, 1, NULL, 0); od = omap_device_alloc(pdev, ohs, 1);
if (IS_ERR(od)) { if (IS_ERR(od)) {
pr_err("Could not alloc omap_device for %s\n", pdev_name); pr_err("Could not alloc omap_device for %s\n", pdev_name);
r = -ENOMEM; r = -ENOMEM;
......
...@@ -248,7 +248,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) ...@@ -248,7 +248,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
p->errata = configure_dma_errata(); p->errata = configure_dma_errata();
pdev = omap_device_build(name, 0, oh, p, sizeof(*p), NULL, 0, 0); pdev = omap_device_build(name, 0, oh, p, sizeof(*p));
kfree(p); kfree(p);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("%s: Can't build omap_device for %s:%s.\n", pr_err("%s: Can't build omap_device for %s:%s.\n",
......
...@@ -51,8 +51,7 @@ static int __init omap_init_drm(void) ...@@ -51,8 +51,7 @@ static int __init omap_init_drm(void)
oh = omap_hwmod_lookup("dmm"); oh = omap_hwmod_lookup("dmm");
if (oh) { if (oh) {
pdev = omap_device_build(oh->name, -1, oh, NULL, 0, NULL, 0, pdev = omap_device_build(oh->name, -1, oh, NULL, 0);
false);
WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", WARN(IS_ERR(pdev), "Could not build omap_device for %s\n",
oh->name); oh->name);
} }
......
...@@ -131,8 +131,7 @@ static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) ...@@ -131,8 +131,7 @@ static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
pwrdm = omap_hwmod_get_pwrdm(oh); pwrdm = omap_hwmod_get_pwrdm(oh);
pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm); pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm);
pdev = omap_device_build(name, id - 1, oh, pdata, pdev = omap_device_build(name, id - 1, oh, pdata, sizeof(*pdata));
sizeof(*pdata), NULL, 0, false);
kfree(pdata); kfree(pdata);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
......
...@@ -1220,7 +1220,7 @@ static int __init omap_gpmc_init(void) ...@@ -1220,7 +1220,7 @@ static int __init omap_gpmc_init(void)
return -ENODEV; return -ENODEV;
} }
pdev = omap_device_build(DEVICE_NAME, -1, oh, NULL, 0, NULL, 0, 0); pdev = omap_device_build(DEVICE_NAME, -1, oh, NULL, 0);
WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name); WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);
return IS_ERR(pdev) ? PTR_ERR(pdev) : 0; return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;
......
...@@ -87,7 +87,7 @@ static int __init omap_init_hdq(void) ...@@ -87,7 +87,7 @@ static int __init omap_init_hdq(void)
if (!oh) if (!oh)
return 0; return 0;
pdev = omap_device_build(devname, id, oh, NULL, 0, NULL, 0, 0); pdev = omap_device_build(devname, id, oh, NULL, 0);
WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n", WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n",
devname, oh->name); devname, oh->name);
......
...@@ -522,7 +522,7 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo, ...@@ -522,7 +522,7 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
} }
dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id); dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id);
od = omap_device_alloc(pdev, ohs, 1, NULL, 0); od = omap_device_alloc(pdev, ohs, 1);
if (IS_ERR(od)) { if (IS_ERR(od)) {
pr_err("Could not allocate od for %s\n", name); pr_err("Could not allocate od for %s\n", name);
goto put_pdev; goto put_pdev;
......
...@@ -46,8 +46,7 @@ static int __init hwspinlocks_init(void) ...@@ -46,8 +46,7 @@ static int __init hwspinlocks_init(void)
return -EINVAL; return -EINVAL;
pdev = omap_device_build(dev_name, 0, oh, &omap_hwspinlock_pdata, pdev = omap_device_build(dev_name, 0, oh, &omap_hwspinlock_pdata,
sizeof(struct hwspinlock_pdata), sizeof(struct hwspinlock_pdata));
NULL, 0, false);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("Can't build omap_device for %s:%s\n", dev_name, pr_err("Can't build omap_device for %s:%s\n", dev_name,
oh_name); oh_name);
......
...@@ -178,8 +178,7 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata, ...@@ -178,8 +178,7 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,
if (cpu_is_omap34xx()) if (cpu_is_omap34xx())
pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat; pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat;
pdev = omap_device_build(name, bus_id, oh, pdata, pdev = omap_device_build(name, bus_id, oh, pdata,
sizeof(struct omap_i2c_bus_platform_data), sizeof(struct omap_i2c_bus_platform_data));
NULL, 0, 0);
WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name); WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name);
return PTR_RET(pdev); return PTR_RET(pdev);
......
...@@ -101,7 +101,7 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused) ...@@ -101,7 +101,7 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
count++; count++;
} }
pdev = omap_device_build_ss(name, id, oh_device, count, pdata, pdev = omap_device_build_ss(name, id, oh_device, count, pdata,
sizeof(*pdata), NULL, 0, false); sizeof(*pdata));
kfree(pdata); kfree(pdata);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("%s: Can't build omap_device for %s:%s.\n", __func__, pr_err("%s: Can't build omap_device for %s:%s.\n", __func__,
......
...@@ -150,7 +150,7 @@ void __init omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data) ...@@ -150,7 +150,7 @@ void __init omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data)
return; return;
} }
pdev = omap_device_build(dev_name, id, oh, mmc_data[0], pdev = omap_device_build(dev_name, id, oh, mmc_data[0],
sizeof(struct omap_mmc_platform_data), NULL, 0, 0); sizeof(struct omap_mmc_platform_data));
if (IS_ERR(pdev)) if (IS_ERR(pdev))
WARN(1, "Can'd build omap_device for %s:%s.\n", WARN(1, "Can'd build omap_device for %s:%s.\n",
dev_name, oh->name); dev_name, oh->name);
......
...@@ -41,8 +41,7 @@ static int __init omap_iommu_dev_init(struct omap_hwmod *oh, void *unused) ...@@ -41,8 +41,7 @@ static int __init omap_iommu_dev_init(struct omap_hwmod *oh, void *unused)
pdata->deassert_reset = omap_device_deassert_hardreset; pdata->deassert_reset = omap_device_deassert_hardreset;
} }
pdev = omap_device_build("omap-iommu", i, oh, pdata, sizeof(*pdata), pdev = omap_device_build("omap-iommu", i, oh, pdata, sizeof(*pdata));
NULL, 0, 0);
kfree(pdata); kfree(pdata);
......
This diff is collapsed.
...@@ -13,20 +13,12 @@ ...@@ -13,20 +13,12 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
* *
* Eventually this type of functionality should either be * This type of functionality should be implemented as a proper
* a) implemented via arch-specific pointers in platform_device * omap_bus/omap_device in Linux.
* or
* b) implemented as a proper omap_bus/omap_device in Linux, no more
* platform_device
* *
* omap_device differs from omap_hwmod in that it includes external * omap_device differs from omap_hwmod in that it includes external
* (e.g., board- and system-level) integration details. omap_hwmod * (e.g., board- and system-level) integration details. omap_hwmod
* stores hardware data that is invariant for a given OMAP chip. * stores hardware data that is invariant for a given OMAP chip.
*
* To do:
* - GPIO integration
* - regulator integration
*
*/ */
#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H #ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H
#define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H #define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H
...@@ -45,19 +37,14 @@ extern struct dev_pm_domain omap_device_pm_domain; ...@@ -45,19 +37,14 @@ extern struct dev_pm_domain omap_device_pm_domain;
#define OMAP_DEVICE_STATE_SHUTDOWN 3 #define OMAP_DEVICE_STATE_SHUTDOWN 3
/* omap_device.flags values */ /* omap_device.flags values */
#define OMAP_DEVICE_SUSPENDED BIT(0) #define OMAP_DEVICE_SUSPENDED BIT(0)
#define OMAP_DEVICE_NO_IDLE_ON_SUSPEND BIT(1) #define OMAP_DEVICE_NO_IDLE_ON_SUSPEND BIT(1)
/** /**
* struct omap_device - omap_device wrapper for platform_devices * struct omap_device - omap_device wrapper for platform_devices
* @pdev: platform_device * @pdev: platform_device
* @hwmods: (one .. many per omap_device) * @hwmods: (one .. many per omap_device)
* @hwmods_cnt: ARRAY_SIZE() of @hwmods * @hwmods_cnt: ARRAY_SIZE() of @hwmods
* @pm_lats: ptr to an omap_device_pm_latency table
* @pm_lats_cnt: ARRAY_SIZE() of what is passed to @pm_lats
* @pm_lat_level: array index of the last odpl entry executed - -1 if never
* @dev_wakeup_lat: dev wakeup latency in nanoseconds
* @_dev_wakeup_lat_limit: dev wakeup latency limit in nsec - set by OMAP PM
* @_state: one of OMAP_DEVICE_STATE_* (see above) * @_state: one of OMAP_DEVICE_STATE_* (see above)
* @flags: device flags * @flags: device flags
* @_driver_status: one of BUS_NOTIFY_*_DRIVER from <linux/device.h> * @_driver_status: one of BUS_NOTIFY_*_DRIVER from <linux/device.h>
...@@ -71,12 +58,7 @@ extern struct dev_pm_domain omap_device_pm_domain; ...@@ -71,12 +58,7 @@ extern struct dev_pm_domain omap_device_pm_domain;
struct omap_device { struct omap_device {
struct platform_device *pdev; struct platform_device *pdev;
struct omap_hwmod **hwmods; struct omap_hwmod **hwmods;
struct omap_device_pm_latency *pm_lats;
u32 dev_wakeup_lat;
u32 _dev_wakeup_lat_limit;
unsigned long _driver_status; unsigned long _driver_status;
u8 pm_lats_cnt;
s8 pm_lat_level;
u8 hwmods_cnt; u8 hwmods_cnt;
u8 _state; u8 _state;
u8 flags; u8 flags;
...@@ -86,36 +68,25 @@ struct omap_device { ...@@ -86,36 +68,25 @@ struct omap_device {
int omap_device_enable(struct platform_device *pdev); int omap_device_enable(struct platform_device *pdev);
int omap_device_idle(struct platform_device *pdev); int omap_device_idle(struct platform_device *pdev);
int omap_device_shutdown(struct platform_device *pdev);
/* Core code interface */ /* Core code interface */
struct platform_device *omap_device_build(const char *pdev_name, int pdev_id, struct platform_device *omap_device_build(const char *pdev_name, int pdev_id,
struct omap_hwmod *oh, void *pdata, struct omap_hwmod *oh, void *pdata,
int pdata_len, int pdata_len);
struct omap_device_pm_latency *pm_lats,
int pm_lats_cnt, int is_early_device);
struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
struct omap_hwmod **oh, int oh_cnt, struct omap_hwmod **oh, int oh_cnt,
void *pdata, int pdata_len, void *pdata, int pdata_len);
struct omap_device_pm_latency *pm_lats,
int pm_lats_cnt, int is_early_device);
struct omap_device *omap_device_alloc(struct platform_device *pdev, struct omap_device *omap_device_alloc(struct platform_device *pdev,
struct omap_hwmod **ohs, int oh_cnt, struct omap_hwmod **ohs, int oh_cnt);
struct omap_device_pm_latency *pm_lats,
int pm_lats_cnt);
void omap_device_delete(struct omap_device *od); void omap_device_delete(struct omap_device *od);
int omap_device_register(struct platform_device *pdev); int omap_device_register(struct platform_device *pdev);
void __iomem *omap_device_get_rt_va(struct omap_device *od);
struct device *omap_device_get_by_hwmod_name(const char *oh_name); struct device *omap_device_get_by_hwmod_name(const char *oh_name);
/* OMAP PM interface */ /* OMAP PM interface */
int omap_device_align_pm_lat(struct platform_device *pdev,
u32 new_wakeup_lat_limit);
struct powerdomain *omap_device_get_pwrdm(struct omap_device *od);
int omap_device_get_context_loss_count(struct platform_device *pdev); int omap_device_get_context_loss_count(struct platform_device *pdev);
/* Other */ /* Other */
...@@ -124,40 +95,6 @@ int omap_device_assert_hardreset(struct platform_device *pdev, ...@@ -124,40 +95,6 @@ int omap_device_assert_hardreset(struct platform_device *pdev,
const char *name); const char *name);
int omap_device_deassert_hardreset(struct platform_device *pdev, int omap_device_deassert_hardreset(struct platform_device *pdev,
const char *name); const char *name);
int omap_device_idle_hwmods(struct omap_device *od);
int omap_device_enable_hwmods(struct omap_device *od);
int omap_device_disable_clocks(struct omap_device *od);
int omap_device_enable_clocks(struct omap_device *od);
/*
* Entries should be kept in latency order ascending
*
* deact_lat is the maximum number of microseconds required to complete
* deactivate_func() at the device's slowest OPP.
*
* act_lat is the maximum number of microseconds required to complete
* activate_func() at the device's slowest OPP.
*
* This will result in some suboptimal power management decisions at fast
* OPPs, but avoids having to recompute all device power management decisions
* if the system shifts from a fast OPP to a slow OPP (in order to meet
* latency requirements).
*
* XXX should deactivate_func/activate_func() take platform_device pointers
* rather than omap_device pointers?
*/
struct omap_device_pm_latency {
u32 deactivate_lat;
u32 deactivate_lat_worst;
int (*deactivate_func)(struct omap_device *od);
u32 activate_lat;
u32 activate_lat_worst;
int (*activate_func)(struct omap_device *od);
u32 flags;
};
#define OMAP_DEVICE_LATENCY_AUTO_ADJUST BIT(1)
/* Get omap_device pointer from platform_device pointer */ /* Get omap_device pointer from platform_device pointer */
static inline struct omap_device *to_omap_device(struct platform_device *pdev) static inline struct omap_device *to_omap_device(struct platform_device *pdev)
......
...@@ -139,6 +139,8 @@ ...@@ -139,6 +139,8 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <asm/system_misc.h>
#include "clock.h" #include "clock.h"
#include "omap_hwmod.h" #include "omap_hwmod.h"
...@@ -2134,6 +2136,8 @@ static int _enable(struct omap_hwmod *oh) ...@@ -2134,6 +2136,8 @@ static int _enable(struct omap_hwmod *oh)
_enable_clocks(oh); _enable_clocks(oh);
if (soc_ops.enable_module) if (soc_ops.enable_module)
soc_ops.enable_module(oh); soc_ops.enable_module(oh);
if (oh->flags & HWMOD_BLOCK_WFI)
disable_hlt();
if (soc_ops.update_context_lost) if (soc_ops.update_context_lost)
soc_ops.update_context_lost(oh); soc_ops.update_context_lost(oh);
...@@ -2195,6 +2199,8 @@ static int _idle(struct omap_hwmod *oh) ...@@ -2195,6 +2199,8 @@ static int _idle(struct omap_hwmod *oh)
_idle_sysc(oh); _idle_sysc(oh);
_del_initiator_dep(oh, mpu_oh); _del_initiator_dep(oh, mpu_oh);
if (oh->flags & HWMOD_BLOCK_WFI)
enable_hlt();
if (soc_ops.disable_module) if (soc_ops.disable_module)
soc_ops.disable_module(oh); soc_ops.disable_module(oh);
...@@ -2303,6 +2309,8 @@ static int _shutdown(struct omap_hwmod *oh) ...@@ -2303,6 +2309,8 @@ static int _shutdown(struct omap_hwmod *oh)
if (oh->_state == _HWMOD_STATE_ENABLED) { if (oh->_state == _HWMOD_STATE_ENABLED) {
_del_initiator_dep(oh, mpu_oh); _del_initiator_dep(oh, mpu_oh);
/* XXX what about the other system initiators here? dma, dsp */ /* XXX what about the other system initiators here? dma, dsp */
if (oh->flags & HWMOD_BLOCK_WFI)
enable_hlt();
if (soc_ops.disable_module) if (soc_ops.disable_module)
soc_ops.disable_module(oh); soc_ops.disable_module(oh);
_disable_clocks(oh); _disable_clocks(oh);
......
...@@ -451,6 +451,14 @@ struct omap_hwmod_omap4_prcm { ...@@ -451,6 +451,14 @@ struct omap_hwmod_omap4_prcm {
* enabled. This prevents the hwmod code from being able to * enabled. This prevents the hwmod code from being able to
* enable and reset the IP block early. XXX Eventually it should * enable and reset the IP block early. XXX Eventually it should
* be possible to query the clock framework for this information. * be possible to query the clock framework for this information.
* HWMOD_BLOCK_WFI: Some OMAP peripherals apparently don't work
* correctly if the MPU is allowed to go idle while the
* peripherals are active. This is apparently true for the I2C on
* OMAP2420, and also the EMAC on AM3517/3505. It's unlikely that
* this is really true -- we're probably not configuring something
* correctly, or this is being abused to deal with some PM latency
* issues -- but we're currently suffering from a shortage of
* folks who are able to track these issues down properly.
*/ */
#define HWMOD_SWSUP_SIDLE (1 << 0) #define HWMOD_SWSUP_SIDLE (1 << 0)
#define HWMOD_SWSUP_MSTANDBY (1 << 1) #define HWMOD_SWSUP_MSTANDBY (1 << 1)
...@@ -462,6 +470,7 @@ struct omap_hwmod_omap4_prcm { ...@@ -462,6 +470,7 @@ struct omap_hwmod_omap4_prcm {
#define HWMOD_CONTROL_OPT_CLKS_IN_RESET (1 << 7) #define HWMOD_CONTROL_OPT_CLKS_IN_RESET (1 << 7)
#define HWMOD_16BIT_REG (1 << 8) #define HWMOD_16BIT_REG (1 << 8)
#define HWMOD_EXT_OPT_MAIN_CLK (1 << 9) #define HWMOD_EXT_OPT_MAIN_CLK (1 << 9)
#define HWMOD_BLOCK_WFI (1 << 10)
/* /*
* omap_hwmod._int_flags definitions * omap_hwmod._int_flags definitions
......
...@@ -121,7 +121,12 @@ static struct omap_hwmod omap2420_i2c1_hwmod = { ...@@ -121,7 +121,12 @@ static struct omap_hwmod omap2420_i2c1_hwmod = {
}, },
.class = &i2c_class, .class = &i2c_class,
.dev_attr = &i2c_dev_attr, .dev_attr = &i2c_dev_attr,
.flags = HWMOD_16BIT_REG, /*
* From mach-omap2/pm24xx.c: "Putting MPU into the WFI state
* while a transfer is active seems to cause the I2C block to
* timeout. Why? Good question."
*/
.flags = (HWMOD_16BIT_REG | HWMOD_BLOCK_WFI),
}; };
/* I2C2 */ /* I2C2 */
......
This diff is collapsed.
...@@ -32,8 +32,6 @@ ...@@ -32,8 +32,6 @@
#include "pm.h" #include "pm.h"
#include "twl-common.h" #include "twl-common.h"
static struct omap_device_pm_latency *pm_lats;
/* /*
* omap_pm_suspend: points to a function that does the SoC-specific * omap_pm_suspend: points to a function that does the SoC-specific
* suspend work * suspend work
...@@ -82,7 +80,7 @@ static int __init _init_omap_device(char *name) ...@@ -82,7 +80,7 @@ static int __init _init_omap_device(char *name)
__func__, name)) __func__, name))
return -ENODEV; return -ENODEV;
pdev = omap_device_build(oh->name, 0, oh, NULL, 0, pm_lats, 0, false); pdev = omap_device_build(oh->name, 0, oh, NULL, 0);
if (WARN(IS_ERR(pdev), "%s: could not build omap_device for %s\n", if (WARN(IS_ERR(pdev), "%s: could not build omap_device for %s\n",
__func__, name)) __func__, name))
return -ENODEV; return -ENODEV;
......
...@@ -140,14 +140,6 @@ static int omap2_enter_full_retention(void) ...@@ -140,14 +140,6 @@ static int omap2_enter_full_retention(void)
return 0; return 0;
} }
static int omap2_i2c_active(void)
{
u32 l;
l = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
return l & (OMAP2420_EN_I2C2_MASK | OMAP2420_EN_I2C1_MASK);
}
static int sti_console_enabled; static int sti_console_enabled;
static int omap2_allow_mpu_retention(void) static int omap2_allow_mpu_retention(void)
...@@ -172,11 +164,6 @@ static int omap2_allow_mpu_retention(void) ...@@ -172,11 +164,6 @@ static int omap2_allow_mpu_retention(void)
static void omap2_enter_mpu_retention(void) static void omap2_enter_mpu_retention(void)
{ {
/* Putting MPU into the WFI state while a transfer is active
* seems to cause the I2C block to timeout. Why? Good question. */
if (omap2_i2c_active())
return;
/* The peripherals seem not to be able to wake up the MPU when /* The peripherals seem not to be able to wake up the MPU when
* it is in retention mode. */ * it is in retention mode. */
if (omap2_allow_mpu_retention()) { if (omap2_allow_mpu_retention()) {
......
...@@ -48,8 +48,7 @@ static int __init omap2_init_pmu(unsigned oh_num, char *oh_names[]) ...@@ -48,8 +48,7 @@ static int __init omap2_init_pmu(unsigned oh_num, char *oh_names[])
} }
} }
omap_pmu_dev = omap_device_build_ss(dev_name, -1, oh, oh_num, NULL, 0, omap_pmu_dev = omap_device_build_ss(dev_name, -1, oh, oh_num, NULL, 0);
NULL, 0, 0);
WARN(IS_ERR(omap_pmu_dev), "Can't build omap_device for %s.\n", WARN(IS_ERR(omap_pmu_dev), "Can't build omap_device for %s.\n",
dev_name); dev_name);
......
...@@ -316,8 +316,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata, ...@@ -316,8 +316,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata,
if (WARN_ON(!oh)) if (WARN_ON(!oh))
return; return;
pdev = omap_device_build(name, uart->num, oh, pdata, pdata_size, pdev = omap_device_build(name, uart->num, oh, pdata, pdata_size);
NULL, 0, false);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
WARN(1, "Could not build omap_device for %s: %s.\n", name, WARN(1, "Could not build omap_device for %s: %s.\n", name,
oh->name); oh->name);
......
...@@ -152,8 +152,7 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user) ...@@ -152,8 +152,7 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
sr_data->enable_on_init = sr_enable_on_init; sr_data->enable_on_init = sr_enable_on_init;
pdev = omap_device_build(name, i, oh, sr_data, sizeof(*sr_data), pdev = omap_device_build(name, i, oh, sr_data, sizeof(*sr_data), 0);
NULL, 0, 0);
if (IS_ERR(pdev)) if (IS_ERR(pdev))
pr_warning("%s: Could not build omap_device for %s: %s.\n\n", pr_warning("%s: Could not build omap_device for %s: %s.\n\n",
__func__, name, oh->name); __func__, name, oh->name);
......
...@@ -702,8 +702,7 @@ static int __init omap_timer_init(struct omap_hwmod *oh, void *unused) ...@@ -702,8 +702,7 @@ static int __init omap_timer_init(struct omap_hwmod *oh, void *unused)
pdata->timer_errata = omap_dm_timer_get_errata(); pdata->timer_errata = omap_dm_timer_get_errata();
pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata), pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata));
NULL, 0, 0);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("%s: Can't build omap_device for %s: %s.\n", pr_err("%s: Can't build omap_device for %s: %s.\n",
......
...@@ -42,14 +42,6 @@ static struct usbtll_omap_platform_data usbtll_data; ...@@ -42,14 +42,6 @@ static struct usbtll_omap_platform_data usbtll_data;
static struct ehci_hcd_omap_platform_data ehci_data; static struct ehci_hcd_omap_platform_data ehci_data;
static struct ohci_hcd_omap_platform_data ohci_data; static struct ohci_hcd_omap_platform_data ohci_data;
static struct omap_device_pm_latency omap_uhhtll_latency[] = {
{
.deactivate_func = omap_device_idle_hwmods,
.activate_func = omap_device_enable_hwmods,
.flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
},
};
/* MUX settings for EHCI pins */ /* MUX settings for EHCI pins */
/* /*
* setup_ehci_io_mux - initialize IO pad mux for USBHOST * setup_ehci_io_mux - initialize IO pad mux for USBHOST
...@@ -530,9 +522,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata) ...@@ -530,9 +522,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
} }
pdev = omap_device_build(OMAP_USBTLL_DEVICE, bus_id, tll_hwm, pdev = omap_device_build(OMAP_USBTLL_DEVICE, bus_id, tll_hwm,
&usbtll_data, sizeof(usbtll_data), &usbtll_data, sizeof(usbtll_data));
omap_uhhtll_latency,
ARRAY_SIZE(omap_uhhtll_latency), false);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("Could not build hwmod device %s\n", pr_err("Could not build hwmod device %s\n",
USBHS_TLL_HWMODNAME); USBHS_TLL_HWMODNAME);
...@@ -540,9 +530,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata) ...@@ -540,9 +530,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
} }
pdev = omap_device_build(OMAP_USBHS_DEVICE, bus_id, uhh_hwm, pdev = omap_device_build(OMAP_USBHS_DEVICE, bus_id, uhh_hwm,
&usbhs_data, sizeof(usbhs_data), &usbhs_data, sizeof(usbhs_data));
omap_uhhtll_latency,
ARRAY_SIZE(omap_uhhtll_latency), false);
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("Could not build hwmod devices %s\n", pr_err("Could not build hwmod devices %s\n",
USBHS_UHH_HWMODNAME); USBHS_UHH_HWMODNAME);
......
...@@ -102,7 +102,7 @@ void __init usb_musb_init(struct omap_musb_board_data *musb_board_data) ...@@ -102,7 +102,7 @@ void __init usb_musb_init(struct omap_musb_board_data *musb_board_data)
return; return;
pdev = omap_device_build(name, bus_id, oh, &musb_plat, pdev = omap_device_build(name, bus_id, oh, &musb_plat,
sizeof(musb_plat), NULL, 0, false); sizeof(musb_plat));
if (IS_ERR(pdev)) { if (IS_ERR(pdev)) {
pr_err("Could not build omap_device for %s %s\n", pr_err("Could not build omap_device for %s %s\n",
name, oh_name); name, oh_name);
......
...@@ -124,8 +124,7 @@ static int __init omap_init_wdt(void) ...@@ -124,8 +124,7 @@ static int __init omap_init_wdt(void)
pdata.read_reset_sources = prm_read_reset_sources; pdata.read_reset_sources = prm_read_reset_sources;
pdev = omap_device_build(dev_name, id, oh, &pdata, pdev = omap_device_build(dev_name, id, oh, &pdata,
sizeof(struct omap_wd_timer_platform_data), sizeof(struct omap_wd_timer_platform_data));
NULL, 0, 0);
WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n", WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n",
dev_name, oh->name); dev_name, oh->name);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment