>From 874bc262b47319b311d14ca32a7c1afb9eb388e8 Mon Sep 17 00:00:00 2001
From: Ernesto Ramos <[email protected]>
Date: Thu, 1 Apr 2010 00:17:24 -0600
Subject: [PATCH 4/5] DSPBRIDGE: Remove handles from registry

Remove handles from registry.

Signed-off-by: Ernesto Ramos <[email protected]>
---
 arch/arm/plat-omap/include/dspbridge/drv.h |    3 +
 drivers/dsp/bridge/services/cfg.c          |   59 +++++++++++++++++----------
 2 files changed, 40 insertions(+), 22 deletions(-)

diff --git a/arch/arm/plat-omap/include/dspbridge/drv.h 
b/arch/arm/plat-omap/include/dspbridge/drv.h
index 210ca68..f505b21 100644
--- a/arch/arm/plat-omap/include/dspbridge/drv.h
+++ b/arch/arm/plat-omap/include/dspbridge/drv.h
@@ -128,6 +128,9 @@ struct drv_data {
        char *base_img;
        s32 shm_size;
        int tc_wordswapon;
+       void *drv_object;
+       void *dev_object;
+       void *mgr_object;
 };
 
 /* Process Context */
diff --git a/drivers/dsp/bridge/services/cfg.c 
b/drivers/dsp/bridge/services/cfg.c
index 8f9f84c..8e2d614 100644
--- a/drivers/dsp/bridge/services/cfg.c
+++ b/drivers/dsp/bridge/services/cfg.c
@@ -82,6 +82,10 @@ dsp_status cfg_get_dev_object(struct cfg_devnode 
*dev_node_obj,
 {
        dsp_status status = DSP_SOK;
        u32 dw_buf_size;
+       struct drv_data *drv_datap = dev_get_drvdata(bridge);
+
+       if (!drv_datap)
+               status = DSP_EFAIL;
 
        if (!dev_node_obj)
                status = CFG_E_INVALIDHDEVNODE;
@@ -92,14 +96,12 @@ dsp_status cfg_get_dev_object(struct cfg_devnode 
*dev_node_obj,
        dw_buf_size = sizeof(pdwValue);
        if (DSP_SUCCEEDED(status)) {
 
-               /* check the device string and then call the reg_set_value */
+               /* check the device string and then store dev object */
                if (!
                    (strcmp
                     ((char *)((struct drv_ext *)dev_node_obj)->sz_string,
                      "TIOMAP1510")))
-                       status =
-                           reg_get_value("DEVICE_DSP", (u8 *) pdwValue,
-                                         &dw_buf_size);
+                       *pdwValue = (u32)drv_datap->dev_object;
        }
        if (DSP_FAILED(status))
                pr_err("%s: Failed, status 0x%x\n", __func__, status);
@@ -144,23 +146,31 @@ dsp_status cfg_get_exec_file(struct cfg_devnode 
*dev_node_obj, u32 ul_buf_size,
 dsp_status cfg_get_object(OUT u32 *pdwValue, u32 dw_type)
 {
        dsp_status status = DSP_EINVALIDARG;
-       u32 dw_buf_size;
+       struct drv_data *drv_datap = dev_get_drvdata(bridge);
+
        DBC_REQUIRE(pdwValue != NULL);
 
-       dw_buf_size = sizeof(pdwValue);
+       if (!drv_datap)
+               return DSP_EFAIL;
+
        switch (dw_type) {
        case (REG_DRV_OBJECT):
-               status =
-                   reg_get_value(DRVOBJECT, (u8 *) pdwValue, &dw_buf_size);
-               if (DSP_FAILED(status))
+               if (drv_datap->drv_object) {
+                       *pdwValue = (u32)drv_datap->drv_object;
+                       status = DSP_SOK;
+               } else {
                        status = CFG_E_RESOURCENOTAVAIL;
+               }
                break;
        case (REG_MGR_OBJECT):
-               status =
-                   reg_get_value(MGROBJECT, (u8 *) pdwValue, &dw_buf_size);
-               if (DSP_FAILED(status))
+               if (drv_datap->mgr_object) {
+                       *pdwValue = (u32)drv_datap->mgr_object;
+                       status = DSP_SOK;
+               } else {
                        status = CFG_E_RESOURCENOTAVAIL;
+               }
                break;
+
        default:
                break;
        }
@@ -191,18 +201,21 @@ bool cfg_init(void)
 dsp_status cfg_set_dev_object(struct cfg_devnode *dev_node_obj, u32 dwValue)
 {
        dsp_status status = DSP_SOK;
-       u32 dw_buff_size;
+       struct drv_data *drv_datap = dev_get_drvdata(bridge);
+
+       if (!drv_datap) {
+               pr_err("%s: Failed, status 0x%x\n", __func__, status);
+               return DSP_EFAIL;
+       }
 
        if (!dev_node_obj)
                status = CFG_E_INVALIDHDEVNODE;
 
-       dw_buff_size = sizeof(dwValue);
        if (DSP_SUCCEEDED(status)) {
                /* Store the WCD device object in the Registry */
 
                if (!(strcmp((char *)dev_node_obj, "TIOMAP1510"))) {
-                       status = reg_set_value("DEVICE_DSP", (u8 *) &dwValue,
-                                              dw_buff_size);
+                       drv_datap->dev_object = (void *) dwValue;
                }
        }
        if (DSP_FAILED(status))
@@ -219,17 +232,19 @@ dsp_status cfg_set_dev_object(struct cfg_devnode 
*dev_node_obj, u32 dwValue)
 dsp_status cfg_set_object(u32 dwValue, u32 dw_type)
 {
        dsp_status status = DSP_EINVALIDARG;
-       u32 dw_buff_size;
+       struct drv_data *drv_datap = dev_get_drvdata(bridge);
+
+       if (!drv_datap)
+               return DSP_EFAIL;
 
-       dw_buff_size = sizeof(dwValue);
        switch (dw_type) {
        case (REG_DRV_OBJECT):
-               status =
-                   reg_set_value(DRVOBJECT, (u8 *) &dwValue, dw_buff_size);
+               drv_datap->drv_object = (void *)dwValue;
+               status = DSP_SOK;
                break;
        case (REG_MGR_OBJECT):
-               status =
-                   reg_set_value(MGROBJECT, (u8 *) &dwValue, dw_buff_size);
+               drv_datap->mgr_object = (void *)dwValue;
+               status = DSP_SOK;
                break;
        default:
                break;
-- 
1.5.4.5

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to