OMAP: omap_device cleanup before device-tree integration
Subsystems (5)
v3 cover OMAP: omap_device cleanup before device-tree integration
Hi Kevin,
Here are a couple of cleanups on top of your for_3.2/omap_device branch.
patches are available here:git://gitorious.org/omap-pm/linux.git for_3.2/1_omap_device_cleanup
Regards,
Benoit
Changes since v1: http://www.spinics.net/lists/linux-omap/msg55801.html
- Update the 2 patches from Nishanth based on Kevin's comment and merge them into one patch.
- Fix the omap_device_pm_latency issue reported by Paul.
Changes since v2: http://www.spinics.net/lists/arm-kernel/msg138993.html
- Change the API name from omap_hwmod_name_get_dev to omap_device_get_by_hwmod_name per Kevin's suggestion.
Benoit Cousson (5):
OMAP3: beagle-board: Use the omap_hwmod_name_get_dev API OMAP2+: pm: Use hwmod name instead of dev pointer
OMAP2+: pm: Remove static devices variable for mpu, dsp, iva and l3 PM
OMAP: omap_device: Create a default omap_device_pm_latency OMAP2+: devices: Remove all omap_device_pm_latency structures
Nishanth Menon (1):
OMAP: omap_device: Add omap_device_get_by_hwmod_name
arch/arm/mach-omap2/board-omap3beagle.c | 4 +- arch/arm/mach-omap2/devices.c | 46 ++--------------- arch/arm/mach-omap2/display.c | 11 +---- arch/arm/mach-omap2/dma.c | 11 +---- arch/arm/mach-omap2/gpio.c | 12 +---- arch/arm/mach-omap2/hsmmc.c | 18 +------ arch/arm/mach-omap2/hwspinlock.c | 12 +---- arch/arm/mach-omap2/mcbsp.c | 11 +---- arch/arm/mach-omap2/pm.c | 69 ++++++++----------------- arch/arm/mach-omap2/serial.c | 25 +--------- arch/arm/mach-omap2/sr_device.c | 11 +---- arch/arm/mach-omap2/usb-musb.c | 11 +---- arch/arm/plat-omap/i2c.c | 10 +--- arch/arm/plat-omap/include/plat/omap_device.h | 1 + arch/arm/plat-omap/omap_device.c | 55 +++++++++++++++++++- 15 files changed, 93 insertions(+), 214 deletions(-)
PATCH v3 1/6 OMAP: omap_device: Add omap_device_get_by_hwmod_name
From: Nishanth Menon <[email protected]>
An API which translates a standard hwmod name to corresponding platform_device is useful for drivers when they need to look up the device associated with a hwmod name to map back into the device structure pointers. These ideally should be used by drivers in mach directory. Using a generic hwmod name like "gpu" instead of the actual device name which could change in the future, allows us to:
a) Could in effect help replace apis such as omap2_get_mpuss_device, omap2_get_iva_device, omap2_get_l3_device, omap4_get_dsp_device, etc..
b) Scale to more devices rather than be restricted to named functions
c) Simplify driver's platform_data from passing additional fields all doing the same thing with different function pointer names just for accessing a different device name.
[b-cousson at ti.com: Adapt it to the new pdev pointer inside od, remove the unneeded helpers, and fold the next patch here]
--- arch/arm/plat-omap/include/plat/omap_device.h | 1 + arch/arm/plat-omap/omap_device.c | 36 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 0 deletions(-)
arch/arm/plat-omap/include/plat/omap_device.h +1 -0
@@ -101,6 +101,7 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, int pm_lats_cnt, int is_early_device);void __iomem *omap_device_get_rt_va (struct omap_device *od); +struct device *omap_device_get_by_hwmod_name (const char *oh_name);/* OMAP PM interface */ int omap_device_align_pm_lat(struct platform_device *pdev,
arch/arm/plat-omap/omap_device.c +36 -0
@@ -844,6 +844,42 @@ void __iomem *omap_device_get_rt_va(struct omap_device *od)return omap_hwmod_get_mpu_rt_va (od->hwmods[0 ]); } +/** +* omap_device_get_by_hwmod_name() - convert a hwmod name to +* device pointer. +* @oh_name: name of the hwmod device +* +* Returns back a struct device * pointer associated with a hwmod +* device represented by a hwmod_name +*/ +struct device *omap_device_get_by_hwmod_name (const char *oh_name) +{ +struct omap_hwmod *oh; + +if (!oh_name) { +WARN (1 ,"%s: no hwmod name!\n" , __func__); +return ERR_PTR (-EINVAL ); + } + + oh =omap_hwmod_lookup (oh_name); +if (IS_ERR_OR_NULL (oh)) { +WARN (1 ,"%s: no hwmod for %s\n" , __func__, + oh_name); +return ERR_PTR (oh ?PTR_ERR (oh) : -ENODEV ); + } +if (IS_ERR_OR_NULL (oh->od)) { +WARN (1 ,"%s: no omap_device for %s\n" , __func__, + oh_name); +return ERR_PTR (oh->od ?PTR_ERR (oh->od) : -ENODEV ); + } + +if (IS_ERR_OR_NULL (oh->od->pdev)) +return ERR_PTR (oh->od->pdev ?PTR_ERR (oh->od->pdev) : -ENODEV ); + +return &oh->od->pdev->dev; +} +EXPORT_SYMBOL (omap_device_get_by_hwmod_name); +/* * Public functions intended for use in omap_device_pm_latency * .activate_func and .deactivate_func function pointers
Signature · 1 line
1.7.0.4
PATCH v3 2/6 OMAP3: beagle-board: Use the omap_hwmod_name_get_dev API
In reply to Benoit CoussonReplace the multiple omap2_get_XXX_device APIs with the new omap_hwmod_name_get_dev that uses the hwmod name to get the proper device.
--- arch/arm/mach-omap2/board-omap3beagle.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +2 -2
@@ -493,8 +493,8 @@ static void __init beagle_opp_init(void)if (cpu_is_omap3630 ()) {struct device *mpu_dev, *iva_dev; - mpu_dev =omap2_get_mpuss_device (); - iva_dev =omap2_get_iva_device (); + mpu_dev =omap_device_get_by_hwmod_name ("mpu" ); + iva_dev =omap_device_get_by_hwmod_name ("iva" );if (!mpu_dev || !iva_dev) { pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
Signature · 1 line
1.7.0.4
PATCH v3 3/6 OMAP2+: pm: Use hwmod name instead of dev pointer
In reply to Benoit CoussonReplace the struct device parameter of omap2_set_init_voltage by the hwmod name. It will avoid having to store explicitely the device pointer into a static variable.
Moreover, it will be a little bit more scalable if we introduce new DVFS devices.
--- arch/arm/mach-omap2/pm.c | 22 +++++++++++++++------- 1 files changed, 15 insertions(+), 7 deletions(-)
arch/arm/mach-omap2/pm.c +15 -7
@@ -169,18 +169,26 @@ err:* in the opp entry */ static int __init omap2_set_init_voltage (char *vdd_name,char *clk_name, -struct device *dev) +const char *oh_name) {struct voltagedomain *voltdm;struct clk *clk;struct opp *opp;unsigned long freq, bootup_volt; +struct device *dev; -if (!vdd_name || !clk_name || !dev) { +if (!vdd_name || !clk_name || !oh_name) {printk (KERN_ERR "%s: Invalid parameters!\n" , __func__); goto exit; } + dev =omap_device_get_by_hwmod_name (oh_name); +if (IS_ERR (dev)) { +pr_err ("%s: Unable to get dev pointer for hwmod %s\n" , + __func__, oh_name); + goto exit; + } + voltdm =omap_voltage_domain_lookup (vdd_name);if (IS_ERR (voltdm)) { printk(KERN_ERR "%s: Unable to get vdd pointer for vdd_%s\n",
@@ -226,8 +234,8 @@ static void __init omap3_init_voltages(void)if (!cpu_is_omap34xx ())return ; -omap2_set_init_voltage ("mpu" ,"dpll1_ck" , mpu_dev); -omap2_set_init_voltage ("core" ,"l3_ick" , l3_dev); +omap2_set_init_voltage ("mpu" ,"dpll1_ck" ,"mpu" ); +omap2_set_init_voltage ("core" ,"l3_ick" ,"l3_main" ); }static void __init omap4_init_voltages (void )
@@ -235,9 +243,9 @@ static void __init omap4_init_voltages(void)if (!cpu_is_omap44xx ())return ; -omap2_set_init_voltage ("mpu" ,"dpll_mpu_ck" , mpu_dev); -omap2_set_init_voltage ("core" ,"l3_div_ck" , l3_dev); -omap2_set_init_voltage ("iva" ,"dpll_iva_m5x2_ck" , iva_dev); +omap2_set_init_voltage ("mpu" ,"dpll_mpu_ck" ,"mpu" ); +omap2_set_init_voltage ("core" ,"l3_div_ck" ,"l3_main_1" ); +omap2_set_init_voltage ("iva" ,"dpll_iva_m5x2_ck" ,"iva" ); }static int __init omap2_common_pm_init (void )
Signature · 1 line
1.7.0.4
PATCH v3 4/6 OMAP2+: pm: Remove static devices variable for mpu, dsp, iva and l3 PM
In reply to Benoit CoussonSince the device pointer is now retrieved using the hwmod name, remove the static variables used to store the device pointers for DSP, MPU, IVA and L3 devices for PM/DVFS usage.
--- arch/arm/mach-omap2/pm.c | 47 ++++++--------------------------------------- 1 files changed, 7 insertions(+), 40 deletions(-)
arch/arm/mach-omap2/pm.c +7 -40
@@ -26,38 +26,7 @@static struct omap_device_pm_latency *pm_lats; -static struct device *mpu_dev; -static struct device *iva_dev; -static struct device *l3_dev; -static struct device *dsp_dev; - -struct device *omap2_get_mpuss_device (void ) -{ -WARN_ON_ONCE (!mpu_dev); -return mpu_dev; -} - -struct device *omap2_get_iva_device (void ) -{ -WARN_ON_ONCE (!iva_dev); -return iva_dev; -} - -struct device *omap2_get_l3_device (void ) -{ -WARN_ON_ONCE (!l3_dev); -return l3_dev; -} - -struct device *omap4_get_dsp_device (void ) -{ -WARN_ON_ONCE (!dsp_dev); -return dsp_dev; -} -EXPORT_SYMBOL (omap4_get_dsp_device); - -/* static int _init_omap_device(struct omap_hwmod *oh, void *user) */ -static int _init_omap_device (char *name,struct device **new_dev) +static int _init_omap_device (char *name) {struct omap_hwmod *oh;struct platform_device *pdev;
@@ -72,8 +41,6 @@ static int _init_omap_device(char *name, struct device **new_dev) __func__, name))return -ENODEV ; - *new_dev = &pdev->dev; -return 0 ; }
@@ -82,16 +49,16 @@ static int _init_omap_device(char *name, struct device **new_dev)*/ static void omap2_init_processor_devices (void ) { -_init_omap_device ("mpu" , &mpu_dev); +_init_omap_device ("mpu" );if (omap3_has_iva ()) -_init_omap_device ("iva" , &iva_dev); +_init_omap_device ("iva" );if (cpu_is_omap44xx ()) { -_init_omap_device ("l3_main_1" , &l3_dev); -_init_omap_device ("dsp" , &dsp_dev); -_init_omap_device ("iva" , &iva_dev); +_init_omap_device ("l3_main_1" ); +_init_omap_device ("dsp" ); +_init_omap_device ("iva" ); }else { -_init_omap_device ("l3_main" , &l3_dev); +_init_omap_device ("l3_main" ); } }
Signature · 1 line
1.7.0.4
PATCH v3 5/6 OMAP: omap_device: Create a default omap_device_pm_latency
In reply to Benoit CoussonMost devices are using the same default omap_device_pm_latency structure during device built. In order to avoid the duplication of the same structure everywhere, add a default structure that will be used if the device does not have an explicit one.
Next patches will clean the duplicated structures.
--- arch/arm/plat-omap/omap_device.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-)
arch/arm/plat-omap/omap_device.c +18 -1
@@ -97,6 +97,14 @@static int omap_device_register (struct platform_device *pdev);static int omap_early_device_register (struct platform_device *pdev); +static struct omap_device_pm_latency omap_default_latency[] = { + { + .deactivate_func = omap_device_idle_hwmods, + .activate_func = omap_device_enable_hwmods, + .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , + } +}; +/* Private functions */ /**
@@ -510,8 +518,17 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,if (ret) goto odbs_exit3; - od->pm_lats = pm_lats; +if (!pm_lats) { + pm_lats = omap_default_latency; + pm_lats_cnt =ARRAY_SIZE (omap_default_latency); + } + od->pm_lats_cnt = pm_lats_cnt; + od->pm_lats =kmemdup (pm_lats, +sizeof (struct omap_device_pm_latency ) * pm_lats_cnt, +GFP_KERNEL ); +if (!od->pm_lats) + goto odbs_exit3;for (i =0 ; i < oh_cnt; i++) { hwmods[i]->od = od;
Signature · 1 line
1.7.0.4
Tony Lindgren
maintainerPATCH v3 5/6 OMAP: omap_device: Create a default omap_device_pm_latency
Quoted 21 lines · Benoit Cousson
Most devices are using the same default
omap_device_pm_latencystructure during device built. In order to avoid the duplication of the same structure everywhere, add a default structure that will be used if the device does not have an explicit one.Next patches will clean the duplicated structures.
Signed-off-by Benoit Cousson <[email protected]>Cc Kevin Hilman <[email protected]>Cc Paul Walmsley <[email protected]>--- arch/arm/plat-omap/omap_device.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-)arch/arm/plat-omap/omap_device.c +0
-0@@ -97,6 +97,14 @@static int omap_device_register (struct platform_device *pdev);static int omap_early_device_register (struct platform_device *pdev);
arch/arm/plat-omap/omap_device.c line 108
Quoted 10 lines
arch/arm/plat-omap/omap_device.c +8
-0+static struct omap_device_pm_latency omap_default_latency[] = { + { + .deactivate_func = omap_device_idle_hwmods, + .activate_func = omap_device_enable_hwmods, + .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , + } +}; +/* Private functions */
Isn't this racey between devices if the latency values get adjusted automatically for each device?
Tony
PATCH v3 5/6 OMAP: omap_device: Create a default omap_device_pm_latency
Quoted 23 lines · Tony Lindgren
Quoted 22 lines · Benoit Cousson
Most devices are using the same default
omap_device_pm_latencystructure during device built. In order to avoid the duplication of the same structure everywhere, add a default structure that will be used if the device does not have an explicit one.Next patches will clean the duplicated structures.
Signed-off-by Benoit Cousson <[email protected]>Cc Kevin Hilman <[email protected]>Cc Paul Walmsley <[email protected]>--- arch/arm/plat-omap/omap_device.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-)arch/arm/plat-omap/omap_device.c +0
-0@@ -97,6 +97,14 @@static int omap_device_register (struct platform_device *pdev);static int omap_early_device_register (struct platform_device *pdev);
Quoted 12 lines
arch/arm/plat-omap/omap_device.c line 108
Quoted 9 lines
arch/arm/plat-omap/omap_device.c +8
-0+static struct omap_device_pm_latency omap_default_latency[] = { + { + .deactivate_func = omap_device_idle_hwmods, + .activate_func = omap_device_enable_hwmods, + .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , + } +}; +/* Private functions */ Isn't this racey between devices if the latency values get adjusted automatically for each device?
A copy of this is made for each device (uses kmemdup later in the patch.)
Kevin
Tony Lindgren
maintainerPATCH v3 5/6 OMAP: omap_device: Create a default omap_device_pm_latency
Quoted 6 lines · Kevin Hilman
Quoted 2 lines · Tony Lindgren
Isn't this racey between devices if the latency values get adjusted automatically for each device?
A copy of this is made for each device (uses kmemdup later in the patch.)
Oh ok, sorry for the noise.
Tony
PATCH v3 6/6 OMAP2+: devices: Remove all omap_device_pm_latency structures
In reply to Benoit CoussonRemove all these duplicated structures since a default one is now available.
--- arch/arm/mach-omap2/devices.c | 46 +++---------------------------------- arch/arm/mach-omap2/display.c | 11 +-------- arch/arm/mach-omap2/dma.c | 11 +-------- arch/arm/mach-omap2/gpio.c | 12 +--------- arch/arm/mach-omap2/hsmmc.c | 18 +-------------- arch/arm/mach-omap2/hwspinlock.c | 12 +--------- arch/arm/mach-omap2/mcbsp.c | 11 +-------- arch/arm/mach-omap2/serial.c | 25 +------------------- arch/arm/mach-omap2/sr_device.c | 11 +-------- arch/arm/mach-omap2/usb-musb.c | 11 +-------- arch/arm/plat-omap/i2c.c | 10 +------- 11 files changed, 14 insertions(+), 164 deletions(-)
arch/arm/mach-omap2/devices.c +4 -42
@@ -221,14 +221,6 @@ static inline void omap_init_camera(void)#endif } -struct omap_device_pm_latency omap_keyboard_latency[] = { - { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -int __init omap4_keyboard_init (struct omap4_keypad_platform_data *sdp4430_keypad_data,struct omap_board_data *bdata) {
@@ -248,9 +240,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data keypad_data = sdp4430_keypad_data; pdev =omap_device_build (name, id, oh, keypad_data, -sizeof (struct omap4_keypad_platform_data ), - omap_keyboard_latency, -ARRAY_SIZE (omap_keyboard_latency),0 ); +sizeof (struct omap4_keypad_platform_data ),NULL ,0 ,0 );if (IS_ERR (pdev)) { WARN(1, "Can't build omap_device for %s:%s.\n",
@@ -263,14 +253,6 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data }#if defined(CONFIG_OMAP_MBOX_FWK ) || defined(CONFIG_OMAP_MBOX_FWK_MODULE ) -static struct omap_device_pm_latency mbox_latencies[] = { - [0 ] = { - .activate_func = omap_device_enable_hwmods, - .deactivate_func = omap_device_idle_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static inline void omap_init_mbox (void ) {struct omap_hwmod *oh;
@@ -282,8 +264,7 @@ static inline void omap_init_mbox(void)return ; } - pdev =omap_device_build ("omap-mailbox" ,-1 , oh,NULL ,0 , - mbox_latencies,ARRAY_SIZE (mbox_latencies),0 ); + pdev =omap_device_build ("omap-mailbox" ,-1 , oh,NULL ,0 ,NULL ,0 ,0 );WARN (IS_ERR (pdev),"%s: could not build device, err %ld\n" , __func__,PTR_ERR (pdev)); }
@@ -334,14 +315,6 @@ static inline void omap_init_audio(void) {}#include <plat/mcspi.h> -struct omap_device_pm_latency omap_mcspi_latency[] = { - [0 ] = { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static int omap_mcspi_init (struct omap_hwmod *oh,void *unused) {struct platform_device *pdev;
@@ -372,8 +345,7 @@ static int omap_mcspi_init(struct omap_hwmod *oh, void *unused) spi_num++; pdev =omap_device_build (name, spi_num, oh, pdata, -sizeof (*pdata), omap_mcspi_latency, -ARRAY_SIZE (omap_mcspi_latency),0 ); +sizeof (*pdata),NULL ,0 ,0 );WARN (IS_ERR (pdev),"Can't build omap_device for %s:%s\n" , name, oh->name);kfree (pdata);
@@ -698,14 +670,6 @@ static int __init omap2_init_devices(void)arch_initcall (omap2_init_devices);#if defined(CONFIG_OMAP_WATCHDOG ) || defined(CONFIG_OMAP_WATCHDOG_MODULE ) -static struct omap_device_pm_latency omap_wdt_latency[] = { - [0 ] = { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static int __init omap_init_wdt (void ) {int id =-1 ;
@@ -723,9 +687,7 @@ static int __init omap_init_wdt(void)return -EINVAL ; } - pdev =omap_device_build (dev_name, id, oh,NULL ,0 , - omap_wdt_latency, -ARRAY_SIZE (omap_wdt_latency),0 ); + pdev =omap_device_build (dev_name, id, oh,NULL ,0 ,NULL ,0 ,0 );WARN (IS_ERR (pdev),"Can't build omap_device for %s:%s.\n" , dev_name, oh->name);return 0 ;
arch/arm/mach-omap2/display.c +1 -10
@@ -35,14 +35,6 @@ static struct platform_device omap_display_device = { }, }; -static struct omap_device_pm_latency omap_dss_latency[] = { - [0 ] = { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -struct omap_dss_hwmod_data {const char *oh_name;const char *dev_name;
@@ -111,8 +103,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data) pdev =omap_device_build (curr_dss_hwmod[i].dev_name, curr_dss_hwmod[i].id, oh, &pdata,sizeof (struct omap_display_platform_data ), - omap_dss_latency, -ARRAY_SIZE (omap_dss_latency),0 ); +NULL ,0 ,0 );if (WARN ((IS_ERR (pdev)),"Could not build omap_device for %s\n" , curr_dss_hwmod[i].oh_name))
arch/arm/mach-omap2/dma.c +1 -10
@@ -87,14 +87,6 @@ static u16 reg_map[] = { [CCDN] = 0xd8, }; -static struct omap_device_pm_latency omap2_dma_latency[] = { - { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static void __iomem *dma_base;static inline void dma_write (u32 val,int reg,int lch) {
@@ -258,8 +250,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) p->errata =configure_dma_errata (); - pdev =omap_device_build (name,0 , oh, p,sizeof (*p), - omap2_dma_latency,ARRAY_SIZE (omap2_dma_latency),0 ); + pdev =omap_device_build (name,0 , oh, p,sizeof (*p),NULL ,0 ,0 );kfree (p);if (IS_ERR (pdev)) { pr_err("%s: Can't build omap_device for %s:%s.\n",
arch/arm/mach-omap2/gpio.c +1 -11
@@ -24,14 +24,6 @@#include <plat/omap_hwmod.h> #include <plat/omap_device.h> -static struct omap_device_pm_latency omap_gpio_latency[] = { - [0 ] = { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static int omap2_gpio_dev_init (struct omap_hwmod *oh,void *unused) {struct platform_device *pdev;
@@ -108,9 +100,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) } pdev =omap_device_build (name, id -1 , oh, pdata, -sizeof (*pdata), omap_gpio_latency, -ARRAY_SIZE (omap_gpio_latency), - false); +sizeof (*pdata),NULL ,0 , false);kfree (pdata);if (IS_ERR (pdev)) {
arch/arm/mach-omap2/hsmmc.c +1 -17
@@ -413,31 +413,17 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,return 0 ; } -static struct omap_device_pm_latency omap_hsmmc_latency[] = { - [0 ] = { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -/* -* XXX There should also be an entry here to power off/on the -* MMC regulators/PBIAS cells, etc. -*/ -}; -#define MAX_OMAP_MMC_HWMOD_NAME_LEN 16void __init omap_init_hsmmc (struct omap2_hsmmc_info *hsmmcinfo,int ctrl_nr) {struct omap_hwmod *oh;struct platform_device *pdev; -struct omap_device_pm_latency *ohl;char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN ];struct omap_mmc_platform_data *mmc_data;struct omap_mmc_dev_attr *mmc_dev_attr;char *name;int l; -int ohl_cnt =0 ; mmc_data =kzalloc (sizeof (struct omap_mmc_platform_data ),GFP_KERNEL );if (!mmc_data) {
@@ -452,8 +438,6 @@ void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr)omap_hsmmc_mux (mmc_data, (ctrl_nr -1 )); name ="omap_hsmmc" ; - ohl = omap_hsmmc_latency; - ohl_cnt =ARRAY_SIZE (omap_hsmmc_latency); l =snprintf (oh_name,MAX_OMAP_MMC_HWMOD_NAME_LEN ,"mmc%d" , ctrl_nr);
@@ -472,7 +456,7 @@ void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) } pdev =omap_device_build (name, ctrl_nr -1 , oh, mmc_data, -sizeof (struct omap_mmc_platform_data ), ohl, ohl_cnt, false); +sizeof (struct omap_mmc_platform_data ),NULL ,0 , false);if (IS_ERR (pdev)) {WARN (1 ,"Can't build omap_device for %s:%s.\n" , name, oh->name);kfree (mmc_data->slots[0 ].name);
arch/arm/mach-omap2/hwspinlock.c +1 -11
@@ -23,14 +23,6 @@#include <plat/omap_hwmod.h> #include <plat/omap_device.h> -struct omap_device_pm_latency omap_spinlock_latency[] = { - { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - } -}; -int __init hwspinlocks_init (void ) {int retval =0 ;
@@ -48,9 +40,7 @@ int __init hwspinlocks_init(void)if (oh ==NULL )return -EINVAL ; - pdev =omap_device_build (dev_name,0 , oh,NULL ,0 , - omap_spinlock_latency, -ARRAY_SIZE (omap_spinlock_latency), false); + pdev =omap_device_build (dev_name,0 , oh,NULL ,0 ,NULL ,0 , false);if (IS_ERR (pdev)) {pr_err ("Can't build omap_device for %s:%s\n" , dev_name, oh_name);
arch/arm/mach-omap2/mcbsp.c +1 -10
@@ -102,14 +102,6 @@ int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id) }EXPORT_SYMBOL (omap2_mcbsp_set_clks_src); -struct omap_device_pm_latency omap2_mcbsp_latency[] = { - { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static int omap_init_mcbsp (struct omap_hwmod *oh,void *unused) {int id, count =1 ;
@@ -145,8 +137,7 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) count++; } pdev =omap_device_build_ss (name, id, oh_device, count, pdata, -sizeof (*pdata), omap2_mcbsp_latency, -ARRAY_SIZE (omap2_mcbsp_latency), false); +sizeof (*pdata),NULL ,0 , false);kfree (pdata);if (IS_ERR (pdev)) { pr_err("%s: Can't build omap_device for %s:%s.\n", __func__,
arch/arm/mach-omap2/serial.c +1 -24
@@ -107,28 +107,6 @@ struct omap_uart_state {static LIST_HEAD (uart_list);static u8 num_uarts; -static int uart_idle_hwmod (struct omap_device *od) -{ -omap_hwmod_idle (od->hwmods[0 ]); - -return 0 ; -} - -static int uart_enable_hwmod (struct omap_device *od) -{ -omap_hwmod_enable (od->hwmods[0 ]); - -return 0 ; -} - -static struct omap_device_pm_latency omap_uart_latency[] = { - { - .deactivate_func = uart_idle_hwmod, - .activate_func = uart_enable_hwmod, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static inline unsigned int __serial_read_reg (struct uart_port *up,int offset) {
@@ -800,8 +778,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata)return ; pdev =omap_device_build (name, uart->num, oh, pdata, pdata_size, - omap_uart_latency, -ARRAY_SIZE (omap_uart_latency), false); +NULL ,0 , false);WARN (IS_ERR (pdev),"Could not build omap_device for %s: %s.\n" , name, oh->name);
arch/arm/mach-omap2/sr_device.c +1 -10
@@ -31,14 +31,6 @@static bool sr_enable_on_init; -static struct omap_device_pm_latency omap_sr_latency[] = { - { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST - }, -}; -/* Read EFUSE values from control registers for OMAP3430 */ static void __init sr_set_nvalues (struct omap_volt_data *volt_data,struct omap_sr_data *sr_data)
@@ -121,8 +113,7 @@ static int sr_dev_init(struct omap_hwmod *oh, void *user) sr_data->enable_on_init = sr_enable_on_init; pdev =omap_device_build (name, i, oh, sr_data,sizeof (*sr_data), - omap_sr_latency, -ARRAY_SIZE (omap_sr_latency),0 ); +NULL ,0 ,0 );if (IS_ERR (pdev))pr_warning ("%s: Could not build omap_device for %s: %s.\n\n" , __func__, name, oh->name);
arch/arm/mach-omap2/usb-musb.c +1 -10
@@ -60,14 +60,6 @@ static struct musb_hdrc_platform_data musb_plat = {static u64 musb_dmamask =DMA_BIT_MASK (32 ); -static struct omap_device_pm_latency omap_musb_latency[] = { - { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static void usb_musb_mux_init (struct omap_musb_board_data *board_data) {switch (board_data->interface_type) {
@@ -155,8 +147,7 @@ void __init usb_musb_init(struct omap_musb_board_data *musb_board_data) } od =omap_device_build (name, bus_id, oh, &musb_plat, -sizeof (musb_plat), omap_musb_latency, -ARRAY_SIZE (omap_musb_latency), false); +sizeof (musb_plat),NULL ,0 , false);if (IS_ERR (od)) {pr_err ("Could not build omap_device for %s %s\n" , name, oh_name);
arch/arm/plat-omap/i2c.c +1 -9
@@ -123,14 +123,6 @@ static void omap_pm_set_max_mpu_wakeup_lat_compat(struct device *dev, long t)omap_pm_set_max_mpu_wakeup_lat (dev, t); } -static struct omap_device_pm_latency omap_i2c_latency[] = { - [0 ] = { - .deactivate_func = omap_device_idle_hwmods, - .activate_func = omap_device_enable_hwmods, - .flags =OMAP_DEVICE_LATENCY_AUTO_ADJUST , - }, -}; -static inline int omap2_i2c_add_bus (int bus_id) {int l;
@@ -162,7 +154,7 @@ static inline int omap2_i2c_add_bus(int bus_id) pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat; pdev =omap_device_build (name, bus_id, oh, pdata,sizeof (struct omap_i2c_bus_platform_data ), - omap_i2c_latency,ARRAY_SIZE (omap_i2c_latency),0 ); +NULL ,0 ,0 );WARN (IS_ERR (pdev),"Could not build omap_device for %s\n" , name);return PTR_ERR (pdev);
Signature · 1 line
1.7.0.4
v3 cover OMAP: omap_device cleanup before device-tree integration
In reply to Benoit CoussonQuoted 6 lines · Benoit Cousson
Hi Kevin,
Here are a couple of cleanups on top of your for_3.2/omap_device branch.
patches are available here:
git://gitorious.org/omap-pm/linux.gitfor_3.2/1_omap_device_cleanup
Thanks, this series looks good now. Queuing for v3.2 here:
git://github.com/khilman/linux-omap-pm.git for_3.2/omap_device-2
Kevin