OMAP: omap_device cleanup before device-tree integration
Subsystems (5)
v2 cover OMAP: omap_device cleanup before device-tree integration
Hi Kevin,
Here are a couple of cleanups on top of your (old) for_3.2/omap_device branch rebased on top of -rc4 + Tony's cleanup patches.
Since I cannot pull your latest version, I repost the whole series.
patches are available here:git://gitorious.org/omap-pm/linux.git for_3.2/1_omap_device_cleanup
It is tested on OMAP4 SDP, Panda and Beagle-xM (Yeah, I found one...).
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.
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_hwmod_name_get_dev
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 | 10 ++++ arch/arm/plat-omap/omap_device.c | 49 +++++++++++++++++- 15 files changed, 95 insertions(+), 215 deletions(-)
PATCH v2 1/6 OMAP: omap_device: Add omap_hwmod_name_get_dev
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.
Provide an omap_hwmod_name_get_dev helper function to convert hwmod to device pointer.
This wrapper provides ability for drivers to convert directly from hwmod name back to device pointer without having to handle this on a driver by driver basis.
[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 | 10 +++++++ arch/arm/plat-omap/omap_device.c | 32 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 0 deletions(-)
arch/arm/plat-omap/include/plat/omap_device.h +10 -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 platform_device *omap_hwmod_name_get_pdev (const char *oh_name);/* OMAP PM interface */ int omap_device_align_pm_lat(struct platform_device *pdev,
@@ -151,6 +152,15 @@ static inline struct omap_device *to_omap_device(struct platform_device *pdev)return pdev ? pdev->archdata.od :NULL ; } +/* Convert omap_hwmod name to device pointer */ +static inline struct device *omap_hwmod_name_get_dev (const char *oh_name) +{ +struct platform_device *pdev =omap_hwmod_name_get_pdev (oh_name); +if (IS_ERR_OR_NULL (pdev)) +return ERR_PTR (pdev ?PTR_ERR (pdev) : -ENODEV ); +return &pdev->dev; +} +static inline void omap_device_disable_idle_on_suspend (struct platform_device *pdev) {
arch/arm/plat-omap/omap_device.c +32 -0
@@ -841,6 +841,38 @@ void __iomem *omap_device_get_rt_va(struct omap_device *od)return omap_hwmod_get_mpu_rt_va (od->hwmods[0 ]); } +/** +* omap_hwmod_name_get_pdev() - convert a hwmod name to platform_device pointer +* @oh_name: name of the hwmod device +* +* Returns back a struct platform_device * pointer associated with a hwmod +* device represented by a hwmod_name +*/ +struct platform_device *omap_hwmod_name_get_pdev (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 ); + } + +return oh->od->pdev; +} +EXPORT_SYMBOL (omap_hwmod_name_get_pdev); +/* * 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 v2 1/6 OMAP: omap_device: Add omap_hwmod_name_get_dev
Quoted 23 lines · Benoit Cousson
From: Nishanth Menon <[email protected]>
An API which translates a standard hwmod name to corresponding
platform_deviceis 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 asomap2_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'splatform_datafrom passing additional fields all doing the same thing with different function pointer names just for accessing a different device name.Provide an
omap_hwmod_name_get_devhelper function to convert hwmod to device pointer.
This wrapper provides ability for drivers to convert directly from hwmod name back to device pointer without having to handle this on a driver by driver basis.
Quoted 4 lines
Signed-off-by Nishanth Menon <[email protected]>[b-cousson at ti.com: Adapt it to the new pdev pointer inside od, remove the unneeded helpers, and fold the next patch here]
Signed-off-by Benoit Cousson <[email protected]>
I replied to wrong version of patch before, here's the comment again:
One other comment on the API here.
This is an omap_hwmod_* API being added to omap_device.h.
Seems like the function name should be something more like:omap_device_get_by_name(), or probably omap_device_get_by_hwmod_name().
Kevin
PATCH v2 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
@@ -491,8 +491,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_hwmod_name_get_dev ("mpu" ); + iva_dev =omap_hwmod_name_get_dev ("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 v2 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
@@ -171,18 +171,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_hwmod_name_get_dev (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",
@@ -228,8 +236,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 )
@@ -237,9 +245,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 v2 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 v2 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 | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-)
arch/arm/plat-omap/omap_device.c +15 -2
@@ -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,13 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,if (ret) goto odbs_exit3; - od->pm_lats = pm_lats; - od->pm_lats_cnt = pm_lats_cnt; +if (pm_lats) { + od->pm_lats = pm_lats; + od->pm_lats_cnt = pm_lats_cnt; + }else { + od->pm_lats = omap_default_latency; + od->pm_lats_cnt =ARRAY_SIZE (omap_default_latency); + }for (i =0 ; i < oh_cnt; i++) { hwmods[i]->od = od;
Signature · 1 line
1.7.0.4
PATCH v2 5/6 OMAP: omap_device: Create a default omap_device_pm_latency
Hi Kevin,
Quoted 4 lines · Benoit
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.
[...]
arch/arm/plat-omap/omap_device.c struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, · line 527
Quoted 9 lines
arch/arm/plat-omap/omap_device.c +7
-2- od->pm_lats = pm_lats; - od->pm_lats_cnt = pm_lats_cnt; +if (pm_lats) { + od->pm_lats = pm_lats; + od->pm_lats_cnt = pm_lats_cnt; + }else { + od->pm_lats = omap_default_latency; + od->pm_lats_cnt =ARRAY_SIZE (omap_default_latency); + }
Here is the fix for that part. I did the easy version :-). Splitting the structure in two parts will indeed require more work.
I updated the for_3.2/1_omap_device_cleanup branch.
Regards,
Benoit
---
PATCH v2 5/6 OMAP: omap_device: Create a default omap_device_pm_latency
Quoted 10 lines · Benoit
Hi Kevin,
Quoted 4 lines · Benoit
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.[...]
Quoted 12 lines
arch/arm/plat-omap/omap_device.c struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, · line 527
Quoted 9 lines
arch/arm/plat-omap/omap_device.c +7
-2- od->pm_lats = pm_lats; - od->pm_lats_cnt = pm_lats_cnt; +if (pm_lats) { + od->pm_lats = pm_lats; + od->pm_lats_cnt = pm_lats_cnt; + }else { + od->pm_lats = omap_default_latency; + od->pm_lats_cnt =ARRAY_SIZE (omap_default_latency); + }Here is the fix for that part. I did the easy version :-). Splitting the structure in two parts will indeed require more work.
The kmemdup() method is fine with me.
Quoted 1 line
I updated the for_3.2/1_omap_device_cleanup branch.
Thanks, I'll pick these into my branch (which is now renamed to for_3.2/omap_device-cleanup)
Kevin
Quoted 61 lines
Regards,
Benoit---
Fromad163000568dd61dee441473d0a576d84152da9eMon Sep 17 00:00:00 2001
From: Benoit Cousson <[email protected]>
Date: Tue, 9 Aug 2011 16:54:19 +0200
Subject: [PATCH v3 5/6] OMAP:omap_device: Create a defaultomap_device_pm_latencyMost 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 +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;
PATCH v2 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
v2 cover OMAP: omap_device cleanup before device-tree integration
In reply to Benoit CoussonHi Benoit,
Quoted 6 lines · Benoit Cousson
Hi Kevin,
Here are a couple of cleanups on top of your (old) for_3.2/omap_device branch rebased on top of -rc4 + Tony's cleanup patches.
Since I cannot pull your latest version, I repost the whole series.
I have a (temporary) tree at git://github.com/khilman/linux-omap-pm.git.
Please base the updated series on my for_3.2/omap_device branch there.
Other than the minor API name, this series looks good and I'll add to my omap_device queue for v3.2.
Thanks,
Kevin
Quoted 45 lines
patches are available here:
git://gitorious.org/omap-pm/linux.gitfor_3.2/1_omap_device_cleanupIt is tested on OMAP4 SDP, Panda and Beagle-xM (Yeah, I found one...).
Regards,
BenoitChanges 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.Benoit Cousson (5):
OMAP3: beagle-board: Use theomap_hwmod_name_get_devAPI 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 defaultomap_device_pm_latencyOMAP2+: devices: Remove allomap_device_pm_latencystructuresNishanth Menon (1):
OMAP:omap_device: Addomap_hwmod_name_get_devarch/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 | 10 ++++ arch/arm/plat-omap/omap_device.c | 49 +++++++++++++++++- 15 files changed, 95 insertions(+), 215 deletions(-)--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html