]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
ARM: OMAP: DSPGW: Peripheral (kfunc) control
authorHiroshi DOYU <Hiroshi.DOYU@nokia.com>
Thu, 21 Sep 2006 14:41:46 +0000 (17:41 +0300)
committerJuha Yrjola <juha.yrjola@solidboot.com>
Thu, 21 Sep 2006 15:46:00 +0000 (18:46 +0300)
DSP needs to control some board-specific peripheral devices (GPT,
audio, mbox, etc.) through dspgw kfunc commands.

Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com>
Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
14 files changed:
arch/arm/plat-omap/devices.c
arch/arm/plat-omap/dsp/dsp.h
arch/arm/plat-omap/dsp/dsp_common.c
arch/arm/plat-omap/dsp/dsp_common.h
arch/arm/plat-omap/dsp/dsp_core.c
arch/arm/plat-omap/dsp/dsp_ctl.c
arch/arm/plat-omap/dsp/dsp_mbcmd.h
arch/arm/plat-omap/dsp/dsp_mem.c
arch/arm/plat-omap/dsp/error.c
arch/arm/plat-omap/dsp/ipbuf.c
arch/arm/plat-omap/dsp/ipbuf.h
arch/arm/plat-omap/dsp/mblog.c
arch/arm/plat-omap/dsp/task.c
include/asm-arm/arch-omap/dsp_common.h

index e3e2bd50aa48539d8106425de2145428d5c8f487..070c627bcb0c40bdc8a3730c3938d2c85dfd1c7d 100644 (file)
 
 #include "../plat-omap/dsp/dsp_common.h"
 
+static struct dsp_platform_data dsp_pdata = {
+       .kdev_list = LIST_HEAD_INIT(dsp_pdata.kdev_list),
+};
+
 static struct resource omap_dsp_resources[] = {
        {
                .name   = "dsp_mmu",
@@ -42,9 +46,11 @@ static struct platform_device omap_dsp_device = {
        .id             = -1,
        .num_resources  = ARRAY_SIZE(omap_dsp_resources),
        .resource       = omap_dsp_resources,
+       .dev = {
+               .platform_data = &dsp_pdata,
+       },
 };
 
-
 static inline void omap_init_dsp(void)
 {
        struct resource *res;
@@ -63,12 +69,26 @@ static inline void omap_init_dsp(void)
 
        platform_device_register(&omap_dsp_device);
 }
+
+int dsp_kfunc_device_register(struct dsp_kfunc_device *kdev)
+{
+       static DEFINE_MUTEX(dsp_pdata_lock);
+
+       mutex_init(&kdev->lock);
+
+       mutex_lock(&dsp_pdata_lock);
+       list_add_tail(&kdev->entry, &dsp_pdata.kdev_list);
+       mutex_unlock(&dsp_pdata_lock);
+
+       return 0;
+}
+EXPORT_SYMBOL(dsp_kfunc_device_register);
+
 #else
 static inline void omap_init_dsp(void) { }
-#endif
+#endif /* CONFIG_OMAP_DSP */
 
 /*-------------------------------------------------------------------------*/
-
 #if    defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
 
 #define        OMAP1_I2C_BASE          0xfffb3800
index ec24be72adf92956285f23a79a66d4200fea227a..64d22c665cdace414f866e48f95cd5e1a37874e4 100644 (file)
@@ -116,7 +116,6 @@ struct mb_exarg {
        u16 *argv;
 };
 
-extern struct mbox *mbox_dsp;
 extern void dsp_mbox_start(void);
 extern void dsp_mbox_stop(void);
 extern int dsp_mbox_config(void *p);
@@ -240,5 +239,3 @@ extern const struct cmdinfo *cmdinfo[];
 extern char *subcmd_name(struct mbcmd *mb);
 
 extern void mblog_add(struct mbcmd *mb, arm_dsp_dir_t dir);
-
-extern struct device *dsp_device;
index e48a47dfd11051cb943e766850fc010e1fcee9ff..70e58122fa9fbb6548a4238150e6dbe84f299a4b 100644 (file)
@@ -373,7 +373,7 @@ static void dsp_cpustat_update(void)
                        __dsp_core_enable();
 #endif
                        cpustat.stat = CPUSTAT_RUN;
-                       enable_irq(dsp_mmu_irq);
+                       enable_irq(omap_dsp->mmu_irq);
                }
                return;
        }
@@ -381,7 +381,7 @@ static void dsp_cpustat_update(void)
        /* cpustat.req < CPUSTAT_RUN */
 
        if (cpustat.stat == CPUSTAT_RUN) {
-               disable_irq(dsp_mmu_irq);
+               disable_irq(omap_dsp->mmu_irq);
 #ifdef CONFIG_ARCH_OMAP1
                clk_disable(api_ck_handle);
 #endif
@@ -568,26 +568,6 @@ void dsp_unregister_mem_cb(void)
 }
 #endif /* CONFIG_ARCH_OMAP1 */
 
-/*
- * Audio power control function prototypes and defaults
- * (To be overridden with board specific functions)
- */
-static void generic_audio_pwr_up_request(int stage)
-{
-       printk(KERN_ERR "audio power-up request function is not defined.\n");
-}
-
-void (*omap_dsp_audio_pwr_up_request)(int stage) = generic_audio_pwr_up_request;
-EXPORT_SYMBOL(omap_dsp_audio_pwr_up_request);
-
-static void generic_audio_pwr_down_request(int stage)
-{
-       printk(KERN_ERR "audio power-down request function is not defined.\n");
-}
-
-void (*omap_dsp_audio_pwr_down_request)(int stage) = generic_audio_pwr_down_request;
-EXPORT_SYMBOL(omap_dsp_audio_pwr_down_request);
-
 arch_initcall(omap_dsp_init);
 
 #ifdef CONFIG_ARCH_OMAP1
index a1765042bdb46c88d8799bb219eea8eb04f12902..dc846628f7d6569c48d824145be6db99df1c1f36 100644 (file)
@@ -158,6 +158,49 @@ static inline void dsp_clk_autoidle(void)
 }
 #endif
 
-extern int dsp_mmu_irq;
+struct dsp_kfunc_device {
+       char            *name;
+       struct clk      *fck;
+       struct clk      *ick;;
+       struct mutex     lock;
+       int              enabled;
+       int              type;
+#define DSP_KFUNC_DEV_TYPE_COMMON      1
+#define DSP_KFUNC_DEV_TYPE_AUDIO       2
+
+       struct list_head        entry;
+
+       int     (*probe)(struct dsp_kfunc_device *);
+       int     (*remove)(struct dsp_kfunc_device *);
+       int     (*enable)(struct dsp_kfunc_device *, int);
+       int     (*disable)(struct dsp_kfunc_device *, int);
+};
+
+extern int dsp_kfunc_device_register(struct dsp_kfunc_device *);
+
+struct dsp_platform_data {
+       struct list_head kdev_list;
+};
+
+struct omap_dsp {
+       struct mutex            lock;
+       int                     enabled;        /* stored peripheral status */
+       int                     mmu_irq;
+       struct omap_mbox        *mbox;
+       struct device           *dev;
+       struct list_head        *kdev_list;
+};
+
+#if defined(CONFIG_ARCH_OMAP1)
+#define command_dvfs_stop(m) (0)
+#define command_dvfs_start(m) (0)
+#elif defined(CONFIG_ARCH_OMAP2)
+#define command_dvfs_stop(m) \
+       (((m)->cmd_l == KFUNC_POWER) && ((m)->data == DVFS_STOP))
+#define command_dvfs_start(m) \
+       (((m)->cmd_l == KFUNC_POWER) && ((m)->data == DVFS_START))
+#endif
+
+extern struct omap_dsp *omap_dsp;
 
 #endif /* DRIVER_DSP_COMMON_H */
index 09c0388bdce5c08c60bda78d9b38ace1c1545b1c..66b28529f4daba406de2e433f3fdcf6f5f764b8f 100644 (file)
@@ -40,10 +40,7 @@ MODULE_AUTHOR("Toshihiro Kobayashi <toshihiro.kobayashi@nokia.com>");
 MODULE_DESCRIPTION("OMAP DSP driver module");
 MODULE_LICENSE("GPL");
 
-struct device *dsp_device;
-int dsp_mmu_irq;
-
-struct omap_mbox *mbox_dsp;
+struct omap_dsp *omap_dsp;
 static struct sync_seq *mbseq;
 static u16 mbseq_expect_tmp;
 static u16 *mbseq_expect = &mbseq_expect_tmp;
@@ -134,6 +131,98 @@ const struct cmdinfo *cmdinfo[MBOX_CMD_MAX] = {
        [MBOX_CMD_DSP_DBG]      = &cif_dbg,
 };
 
+static int dsp_kfunc_probe_devices(struct omap_dsp *dsp)
+{
+       struct dsp_kfunc_device *p;
+       int ret, fail = 0;
+
+       mutex_lock(&dsp->lock);
+       list_for_each_entry(p, dsp->kdev_list, entry) {
+               if (p->probe == NULL)
+                       continue;
+               ret = p->probe(p);
+               if (ret) {
+                       printk(KERN_ERR
+                              "probing %s failed\n", p->name);
+                       fail++;
+               }
+       }
+       mutex_unlock(&dsp->lock);
+
+       pr_debug("%s() fail:%d\n", __FUNCTION__, fail);
+
+       return fail;
+}
+
+static int dsp_kfunc_remove_devices(struct omap_dsp *dsp)
+{
+       struct dsp_kfunc_device *p;
+       int ret, fail = 0;
+
+       mutex_lock(&dsp->lock);
+       list_for_each_entry_reverse(p, dsp->kdev_list, entry) {
+               if (p->remove == NULL)
+                       continue;
+               ret = p->remove(p);
+               if (ret) {
+                       printk(KERN_ERR
+                              "removing %s failed\n", p->name);
+                       fail++;
+               }
+       }
+       mutex_unlock(&dsp->lock);
+
+       pr_debug("%s() fail:%d\n", __FUNCTION__, fail);
+
+       return fail;
+}
+
+static int dsp_kfunc_enable_devices(struct omap_dsp *dsp, int type, int stage)
+{
+       struct dsp_kfunc_device *p;
+       int ret, fail = 0;
+
+       mutex_lock(&dsp->lock);
+       list_for_each_entry(p, dsp->kdev_list, entry) {
+               if ((p->type != type) || (p->enable == NULL))
+                       continue;
+               ret = p->enable(p, stage);
+               if (ret) {
+                       printk(KERN_ERR
+                              "enabling %s failed\n", p->name);
+                       fail++;
+               }
+       }
+       mutex_unlock(&dsp->lock);
+
+       pr_debug("%s(%d) fail:%d\n", __FUNCTION__, type, fail);
+
+       return fail;
+}
+
+static int dsp_kfunc_disable_devices(struct omap_dsp *dsp, int type, int stage)
+{
+       struct dsp_kfunc_device *p;
+       int ret, fail = 0;
+
+       mutex_lock(&dsp->lock);
+       list_for_each_entry_reverse(p, omap_dsp->kdev_list, entry) {
+               if ((p->type != type) || (p->disable == NULL))
+                       continue;
+               ret = p->disable(p, stage);
+               if (ret) {
+                       printk(KERN_ERR
+                              "disabling %s failed\n", p->name);
+                       fail++;
+               }
+       }
+       mutex_unlock(&dsp->lock);
+
+       pr_debug("%s(%d) fail:%d\n", __FUNCTION__, type, fail);
+
+       return fail;
+}
+
 int sync_with_dsp(u16 *adr, u16 val, int try_cnt)
 {
        int try;
@@ -145,8 +234,7 @@ int sync_with_dsp(u16 *adr, u16 val, int try_cnt)
                udelay(1);
                if (*(volatile u16 *)adr == val) {
                        /* success! */
-                       printk(KERN_INFO
-                              "omapdsp: sync_with_dsp(): try = %d\n", try);
+                       pr_info("omapdsp: sync_with_dsp(): try = %d\n", try);
                        return 0;
                }
        }
@@ -189,6 +277,13 @@ int __dsp_mbcmd_send_exarg(struct mbcmd *mb, struct mb_exarg *arg,
 {
        int ret = 0;
 
+       if (unlikely(omap_dsp->enabled == 0)) {
+               ret = dsp_kfunc_enable_devices(omap_dsp,
+                                              DSP_KFUNC_DEV_TYPE_COMMON, 0);
+               if (ret == 0)
+                       omap_dsp->enabled = 1;
+       }
+
        /*
         * while MMU fault is set,
         * only recovery command can be executed
@@ -203,7 +298,8 @@ int __dsp_mbcmd_send_exarg(struct mbcmd *mb, struct mb_exarg *arg,
        if (arg)
                dsp_mem_enable(ipbuf_sys_ad);
 
-       ret = omap_mbox_msg_send(mbox_dsp, *(mbox_msg_t *)mb, (void*)arg);
+       ret = omap_mbox_msg_send(omap_dsp->mbox,
+                                *(mbox_msg_t *)mb, (void*)arg);
        if (ret)
                goto out;
 
@@ -268,7 +364,7 @@ static int mbsync_hold_mem_active;
 
 void dsp_mbox_start(void)
 {
-       omap_mbox_init_seq(mbox_dsp);
+       omap_mbox_init_seq(omap_dsp->mbox);
        mbseq_expect_tmp = 0;
 }
 
@@ -308,22 +404,22 @@ int dsp_mbox_config(void *p)
 
 static int __init dsp_mbox_init(void)
 {
-       mbox_dsp->mbox = omap_mbox_get("dsp");
-       if (IS_ERR(mbox_dsp)) {
+       omap_dsp->mbox = omap_mbox_get("dsp");
+       if (IS_ERR(omap_dsp->mbox)) {
                printk(KERN_ERR "failed to get mailbox handler for DSP.\n");
                return -ENODEV;
        }
 
-       mbox_dsp->msg_receive_cb = mbcmd_receiver;
-       mbox_dsp->msg_sender_cb = mbcmd_sender_prepare;
+       omap_dsp->mbox->msg_receive_cb = mbcmd_receiver;
+       omap_dsp->mbox->msg_sender_cb = mbcmd_sender_prepare;
 
        return 0;
 }
 
 static void dsp_mbox_exit(void)
 {
-       mbox_dsp->msg_sender_cb = NULL;
-       mbox_dsp->msg_receive_cb = NULL;
+       omap_dsp->mbox->msg_sender_cb = NULL;
+       omap_dsp->mbox->msg_receive_cb = NULL;
 
        if (mbsync_hold_mem_active) {
                dsp_mem_disable((void *)daram_base);
@@ -352,24 +448,52 @@ static void mbox_kfunc_fbctl(struct mbcmd *mb)
        }
 }
 
-static void mbox_kfunc_audio_pwr(unsigned short data)
+/*
+ * dspgw: KFUNC message handler
+ */
+static void mbox_kfunc_power(unsigned short data)
 {
+       int ret = -1;
+
        switch (data) {
+       case DVFS_START: /* ACK from DSP */
+               /* TBD */
+               break;
        case AUDIO_PWR_UP:
-               omap_dsp_audio_pwr_up_request(0);
-               /* send back ack */
-               mbcompose_send(KFUNC, KFUNC_AUDIO_PWR, AUDIO_PWR_UP);
+               ret = dsp_kfunc_enable_devices(omap_dsp,
+                                              DSP_KFUNC_DEV_TYPE_AUDIO, 0);
+               if (ret == 0)
+                       ret++;
                break;
-       case AUDIO_PWR_DOWN1:
-               omap_dsp_audio_pwr_down_request(1);
+       case AUDIO_PWR_DOWN: /* == AUDIO_PWR_DOWN1 */
+               ret = dsp_kfunc_disable_devices(omap_dsp,
+                                               DSP_KFUNC_DEV_TYPE_AUDIO, 1);
                break;
        case AUDIO_PWR_DOWN2:
-               omap_dsp_audio_pwr_down_request(2);
+               ret = dsp_kfunc_disable_devices(omap_dsp,
+                                               DSP_KFUNC_DEV_TYPE_AUDIO, 2);
+               break;
+       case DSP_PWR_DOWN:
+               ret = dsp_kfunc_disable_devices(omap_dsp,
+                                               DSP_KFUNC_DEV_TYPE_COMMON, 0);
+               if (ret == 0)
+                       omap_dsp->enabled = 0;
                break;
        default:
                printk(KERN_ERR
-                      "mailbox: Unknown AUDIO_PWR from DSP: 0x%04x\n", data);
+                      "mailbox: Unknown PWR from DSP: 0x%04x\n", data);
+               break;
        }
+
+       if (unlikely(ret < 0)) {
+               printk(KERN_ERR "mailbox: PWR(0x%04x) failed\n", data);
+               return;
+       }
+
+       if (likely(ret == 0))
+               return;
+
+       mbcompose_send(KFUNC, KFUNC_POWER, data);
 }
 
 static void mbox_kfunc(struct mbcmd *mb)
@@ -378,8 +502,8 @@ static void mbox_kfunc(struct mbcmd *mb)
        case KFUNC_FBCTL:
                mbox_kfunc_fbctl(mb);
                break;
-       case KFUNC_AUDIO_PWR:
-               mbox_kfunc_audio_pwr(mb->data);
+       case KFUNC_POWER:
+               mbox_kfunc_power(mb->data);
                break;
        default:
                printk(KERN_ERR
@@ -404,14 +528,34 @@ extern void dsp_taskmod_exit(void);
 static int __init dsp_drv_probe(struct platform_device *pdev)
 {
        int ret;
+       struct omap_dsp *info;
+       struct dsp_platform_data *pdata = pdev->dev.platform_data;
 
        dev_info(&pdev->dev, "OMAP DSP driver initialization\n");
 
-       dsp_device = &pdev->dev;
+       info = kzalloc(sizeof(struct omap_dsp), GFP_KERNEL);
+       if (unlikely(info == NULL)) {
+               dev_dbg(&pdev->dev, "no memory for info\n");
+               return -ENOMEM;
+       }
+       platform_set_drvdata(pdev, info);
+       omap_dsp = info;
 
-       dsp_mmu_irq = platform_get_irq_byname(pdev, "dsp_mmu");
-       if (dsp_mmu_irq < 0)
-               return -ENXIO;
+       mutex_init(&info->lock);
+       info->dev = &pdev->dev;
+       info->kdev_list = &pdata->kdev_list;
+
+       ret = dsp_kfunc_probe_devices(info);
+       if (ret) {
+               ret = -ENXIO;
+               goto fail0;
+       }
+
+       info->mmu_irq = platform_get_irq_byname(pdev, "dsp_mmu");
+       if (unlikely(info->mmu_irq) < 0) {
+               ret = -ENXIO;
+               goto fail1;
+       }
 
 #ifdef CONFIG_ARCH_OMAP2
        clk_enable(dsp_fck_handle);
@@ -420,37 +564,44 @@ static int __init dsp_drv_probe(struct platform_device *pdev)
 #endif
 
        if ((ret = dsp_ctl_core_init()) < 0)
-               goto fail1;
-       if ((ret = dsp_mem_init()) < 0)
                goto fail2;
+       if ((ret = dsp_mem_init()) < 0)
+               goto fail3;
        dsp_ctl_init();
        mblog_init();
        if ((ret = dsp_taskmod_init()) < 0)
-               goto fail3;
-       if ((ret = dsp_mbox_init()) < 0)
                goto fail4;
+       if ((ret = dsp_mbox_init()) < 0)
+               goto fail5;
 
        return 0;
 
-fail4:
+ fail5:
        dsp_taskmod_exit();
-fail3:
+ fail4:
        mblog_exit();
        dsp_ctl_exit();
        dsp_mem_exit();
-fail2:
+ fail3:
        dsp_ctl_core_exit();
-fail1:
+ fail2:
 #ifdef CONFIG_ARCH_OMAP2
        __dsp_per_disable();
        clk_disable(dsp_ick_handle);
        clk_disable(dsp_fck_handle);
 #endif
+ fail1:
+       dsp_kfunc_remove_devices(info);
+ fail0:
+       kfree(info);
+
        return ret;
 }
 
 static int dsp_drv_remove(struct platform_device *pdev)
 {
+       struct omap_dsp *info = platform_get_drvdata(pdev);
+
        dsp_cpustat_request(CPUSTAT_RESET);
 
        dsp_cfgstat_request(CFGSTAT_CLEAN);
@@ -467,6 +618,9 @@ static int dsp_drv_remove(struct platform_device *pdev)
        clk_disable(dsp_ick_handle);
        clk_disable(dsp_fck_handle);
 #endif
+       dsp_kfunc_remove_devices(info);
+       kfree(info);
+
        return 0;
 }
 
index ba7cc2b8b893e09cafd6c8eebb7a93db8575ceab..f0258a38a83e70f2f724299e0eef9eedc5952ed7 100644 (file)
@@ -273,7 +273,7 @@ static int dsp_cfg(void)
                goto out;
 
        /* create runtime sysfs entries */
-       device_create_file(dsp_device, &dev_attr_loadinfo);
+       device_create_file(omap_dsp->dev, &dev_attr_loadinfo);
 
 out:
        dsp_mem_disable((void *)dspmem_base);
@@ -290,7 +290,7 @@ static int dsp_uncfg(void)
        /* FIXME: lock task module */
 
        /* remove runtime sysfs entries */
-       device_remove_file(dsp_device, &dev_attr_loadinfo);
+       device_remove_file(omap_dsp->dev, &dev_attr_loadinfo);
 
        dsp_mbox_stop();
        dsp_twch_stop();
@@ -1038,14 +1038,14 @@ out:
 
 void __init dsp_ctl_init(void)
 {
-       device_create_file(dsp_device, &dev_attr_ifver);
-       device_create_file(dsp_device, &dev_attr_cpustat);
-       device_create_file(dsp_device, &dev_attr_icrmask);
+       device_create_file(omap_dsp->dev, &dev_attr_ifver);
+       device_create_file(omap_dsp->dev, &dev_attr_cpustat);
+       device_create_file(omap_dsp->dev, &dev_attr_icrmask);
 }
 
 void dsp_ctl_exit(void)
 {
-       device_remove_file(dsp_device, &dev_attr_ifver);
-       device_remove_file(dsp_device, &dev_attr_cpustat);
-       device_remove_file(dsp_device, &dev_attr_icrmask);
+       device_remove_file(omap_dsp->dev, &dev_attr_ifver);
+       device_remove_file(omap_dsp->dev, &dev_attr_cpustat);
+       device_remove_file(omap_dsp->dev, &dev_attr_icrmask);
 }
index 8d4ff05cd815087f21748df354b9b6309de3b34d..d30c3bc80647a1c3ee1202c74cb51804167e01ad 100644 (file)
 #define PM_ENABLE              0x01
 
 #define KFUNC_FBCTL            0x00
-#define KFUNC_AUDIO_PWR                0x01
+#define KFUNC_POWER            0x01
 
 #define FBCTL_UPD              0x0000
 #define FBCTL_ENABLE           0x0002
 #define FBCTL_DISABLE          0x0003
 
-#define AUDIO_PWR_UP           0x0000
-#define AUDIO_PWR_DOWN1                0x0001
+/* KFUNC_POWER */
+#define AUDIO_PWR_UP           0x0000  /* ARM(exe/ack) <->  DSP(req)   */
+#define AUDIO_PWR_DOWN         0x0001  /* ARM(exe)     <-  DSP(req)    */
+#define AUDIO_PWR_DOWN1                AUDIO_PWR_DOWN
 #define AUDIO_PWR_DOWN2                0x0002
+#define DSP_PWR_UP             0x0003  /* ARM(exe/snd) ->  DSP(exe)    */
+#define DSP_PWR_DOWN           0x0004  /* ARM(exe)     <-  DSP(req)    */
+#define DVFS_START             0x0006  /* ARM(req)     <-> DSP(exe/ack)*/
+#define DVFS_STOP              0x0007  /* ARM(req)      -> DSP(exe)    */
 
 #define TDEL_SAFE              0x0000
 #define TDEL_KILL              0x0001
index 88aebdb635ed4b059b45cc80cdcf1aad1d5916cd..48b7a7935d2f68e91ae09193ec4eeafa42a1a2ae 100644 (file)
@@ -2313,7 +2313,7 @@ static void do_mmu_int(void)
                        printk(KERN_DEBUG "fault address = %#08x\n",
                               dsp_fault_adr);
                }
-               enable_irq(dsp_mmu_irq);
+               enable_irq(omap_dsp->mmu_irq);
                return;
        }
 
@@ -2408,7 +2408,7 @@ static void do_mmu_int(void)
        dsp_mmu_enable();
 #endif
 
-       enable_irq(dsp_mmu_irq);
+       enable_irq(omap_dsp->mmu_irq);
 }
 
 static DECLARE_WORK(mmu_int_work, (void (*)(void *))do_mmu_int, NULL);
@@ -2420,7 +2420,7 @@ static DECLARE_WORK(mmu_int_work, (void (*)(void *))do_mmu_int, NULL);
 static irqreturn_t dsp_mmu_interrupt(int irq, void *dev_id,
                                     struct pt_regs *regs)
 {
-       disable_irq(dsp_mmu_irq);
+       disable_irq(omap_dsp->mmu_irq);
        schedule_work(&mmu_int_work);
        return IRQ_HANDLED;
 }
@@ -2490,7 +2490,7 @@ int __init dsp_mem_init(void)
        /*
         * DSP MMU interrupt setup
         */
-       ret = request_irq(dsp_mmu_irq, dsp_mmu_interrupt, SA_INTERRUPT,
+       ret = request_irq(omap_dsp->mmu_irq, dsp_mmu_interrupt, SA_INTERRUPT,
                          "dsp_mmu",  &devid_mmu);
        if (ret) {
                printk(KERN_ERR
@@ -2499,11 +2499,11 @@ int __init dsp_mem_init(void)
        }
 
        /* MMU interrupt is not enabled until DSP runs */
-       disable_irq(dsp_mmu_irq);
+       disable_irq(omap_dsp->mmu_irq);
 
-       device_create_file(dsp_device, &dev_attr_mmu);
-       device_create_file(dsp_device, &dev_attr_exmap);
-       device_create_file(dsp_device, &dev_attr_mempool);
+       device_create_file(omap_dsp->dev, &dev_attr_mmu);
+       device_create_file(omap_dsp->dev, &dev_attr_exmap);
+       device_create_file(omap_dsp->dev, &dev_attr_mempool);
 
        return 0;
 
@@ -2519,10 +2519,10 @@ fail:
 
 void dsp_mem_exit(void)
 {
-       free_irq(dsp_mmu_irq, &devid_mmu);
+       free_irq(omap_dsp->mmu_irq, &devid_mmu);
 
        /* recover disable_depth */
-       enable_irq(dsp_mmu_irq);
+       enable_irq(omap_dsp->mmu_irq);
 
 #ifdef CONFIG_ARCH_OMAP1
        dsp_reset_idle_boot_base();
@@ -2535,7 +2535,7 @@ void dsp_mem_exit(void)
                dspvect_page = NULL;
        }
 
-       device_remove_file(dsp_device, &dev_attr_mmu);
-       device_remove_file(dsp_device, &dev_attr_exmap);
-       device_remove_file(dsp_device, &dev_attr_mempool);
+       device_remove_file(omap_dsp->dev, &dev_attr_mmu);
+       device_remove_file(omap_dsp->dev, &dev_attr_exmap);
+       device_remove_file(omap_dsp->dev, &dev_attr_mempool);
 }
index 4720e93ce16e04b33923547fd40a17e470b3a0ae..dc831ce342c0c56834f4cf2302da238c819d049d 100644 (file)
@@ -105,13 +105,13 @@ struct file_operations dsp_err_fops = {
 /* DSP MMU */
 static void dsp_err_mmu_set(unsigned long arg)
 {
-       disable_irq(dsp_mmu_irq);
+       disable_irq(omap_dsp->mmu_irq);
        mmu_fadr = (u32)arg;
 }
 
 static void dsp_err_mmu_clr(void)
 {
-       enable_irq(dsp_mmu_irq);
+       enable_irq(omap_dsp->mmu_irq);
 }
 
 /* WDT */
index cdffc2f4bb49392fa8ba4f106a203823a0f0a170..547d085721eabadab9458802a462dd659ce36e1d 100644 (file)
@@ -42,7 +42,7 @@ void ipbuf_stop(void)
 {
        int i;
 
-       device_remove_file(dsp_device, &dev_attr_ipbuf);
+       device_remove_file(omap_dsp->dev, &dev_attr_ipbuf);
 
        spin_lock(&ipb_free.lock);
        RESET_IPBLINK(&ipb_free);
@@ -116,7 +116,7 @@ int ipbuf_config(u16 ln, u16 lsz, void *base)
               "           %d words * %d lines at 0x%p.\n",
               ipbcfg.lsz, ipbcfg.ln, ipbcfg.base);
 
-       device_create_file(dsp_device, &dev_attr_ipbuf);
+       device_create_file(omap_dsp->dev, &dev_attr_ipbuf);
 
        return ret;
 
index 3ceaa3c4d19f3924208c7e4ec72a1a133d76a0cb..efaa2b74bbd00d0c19bc63d48dad772381a5d76c 100644 (file)
@@ -61,18 +61,18 @@ struct ipbuf_head {
 extern struct ipbcfg ipbcfg;
 extern struct ipbuf_sys *ipbuf_sys_da, *ipbuf_sys_ad;
 
-#define ipb_bsycnt_inc(ipbcfg)                 \
-       do {                                    \
-               disable_mbox_irq(mbox_dsp);     \
-               (ipbcfg)->bsycnt++;             \
-               enable_mbox_irq(mbox_dsp);      \
+#define ipb_bsycnt_inc(ipbcfg)                         \
+       do {                                            \
+               disable_irq(omap_dsp->mbox->irq);       \
+               (ipbcfg)->bsycnt++;                     \
+               enable_irq(omap_dsp->mbox->irq);        \
        } while(0)
 
-#define ipb_bsycnt_dec(ipbcfg)                 \
-       do {                                    \
-               disable_mbox_irq(mbox_dsp);     \
-               (ipbcfg)->bsycnt--;             \
-               enable_mbox_irq(mbox_dsp);      \
+#define ipb_bsycnt_dec(ipbcfg)                         \
+       do {                                            \
+               disable_irq(omap_dsp->mbox->irq);       \
+               (ipbcfg)->bsycnt--;                     \
+               enable_irq(omap_dsp->mbox->irq);        \
        } while(0)
 
 #define dsp_mem_enable_ipbuf() dsp_mem_enable(ipbcfg.base)
@@ -84,7 +84,7 @@ struct ipblink {
        u16 tail;
 };
 
-#define IPBLINK_INIT   {                       \
+#define IPBLINK_INIT {                         \
                .lock = SPIN_LOCK_UNLOCKED,     \
                .top  = BID_NULL,               \
                .tail = BID_NULL,               \
index aa68d6b0230ec7aaac17abab0cb988385afdec4d..e2fb9c3afbf7d0aa8a9afa090b01228a9dac64e3 100644 (file)
@@ -47,6 +47,7 @@ char *subcmd_name(struct mbcmd *mb)
                break;
        case MBOX_CMD_DSP_KFUNC:
                s = (cmd_l == KFUNC_FBCTL) ? "FBCTL":
+                   (cmd_l == KFUNC_POWER) ? "POWER":
                    NULL;
                break;
        case MBOX_CMD_DSP_DSPCFG:
@@ -259,10 +260,10 @@ static struct device_attribute dev_attr_mblog = __ATTR_RO(mblog);
 
 void __init mblog_init(void)
 {
-       device_create_file(dsp_device, &dev_attr_mblog);
+       device_create_file(omap_dsp->dev, &dev_attr_mblog);
 }
 
 void mblog_exit(void)
 {
-       device_remove_file(dsp_device, &dev_attr_mblog);
+       device_remove_file(omap_dsp->dev, &dev_attr_mblog);
 }
index 78b8064950d3069d0ab4c36019af60eb6dc8d666..18d0e41753530545d46766a387bb5f2f5d019cae 100644 (file)
@@ -1811,7 +1811,7 @@ static int taskdev_init(struct taskdev *dev, char *name, unsigned char minor)
        mutex_init(&dev->usecount_lock);
        memcpy(&dev->fops, &dsp_task_fops, sizeof(struct file_operations));
 
-       dev->dev.parent = dsp_device;
+       dev->dev.parent = omap_dsp->dev;
        dev->dev.bus = &dsptask_bus;
        sprintf(dev->dev.bus_id, "dsptask%d", minor);
        dev->dev.release = dsptask_dev_release;
index c244d0a0411eed788a681ccf3d226326f1c6a06a..c61f868f24ee8de1590c0cb0743f7a0ce8452475 100644 (file)
@@ -31,7 +31,4 @@ extern int omap_dsp_request_mem(void);
 extern int omap_dsp_release_mem(void);
 #endif
 
-extern void (*omap_dsp_audio_pwr_up_request)(int stage);
-extern void (*omap_dsp_audio_pwr_down_request)(int stage);
-
 #endif /* ASM_ARCH_DSP_COMMON_H */