linux/arch/mips/bcm63xx/dev-dsp.c
<<
>>
Prefs
   1/*
   2 * Broadcom BCM63xx VoIP DSP registration
   3 *
   4 * This file is subject to the terms and conditions of the GNU General Public
   5 * License.  See the file "COPYING" in the main directory of this archive
   6 * for more details.
   7 *
   8 * Copyright (C) 2009 Florian Fainelli <florian@openwrt.org>
   9 */
  10
  11#include <linux/init.h>
  12#include <linux/kernel.h>
  13#include <linux/platform_device.h>
  14
  15#include <bcm63xx_cpu.h>
  16#include <bcm63xx_dev_dsp.h>
  17#include <bcm63xx_regs.h>
  18#include <bcm63xx_io.h>
  19
  20static struct resource voip_dsp_resources[] = {
  21        {
  22                .start          = -1, /* filled at runtime */
  23                .end            = -1, /* filled at runtime */
  24                .flags          = IORESOURCE_MEM,
  25        },
  26        {
  27                .start          = -1, /* filled at runtime */
  28                .flags          = IORESOURCE_IRQ,
  29        },
  30};
  31
  32static struct platform_device bcm63xx_voip_dsp_device = {
  33        .name           = "bcm63xx-voip-dsp",
  34        .id             = -1,
  35        .num_resources  = ARRAY_SIZE(voip_dsp_resources),
  36        .resource       = voip_dsp_resources,
  37};
  38
  39int __init bcm63xx_dsp_register(const struct bcm63xx_dsp_platform_data *pd)
  40{
  41        struct bcm63xx_dsp_platform_data *dpd;
  42        u32 val;
  43
  44        /* Get the memory window */
  45        val = bcm_mpi_readl(MPI_CSBASE_REG(pd->cs - 1));
  46        val &= MPI_CSBASE_BASE_MASK;
  47        voip_dsp_resources[0].start = val;
  48        voip_dsp_resources[0].end = val + 0xFFFFFFF;
  49        voip_dsp_resources[1].start = pd->ext_irq;
  50
  51        /* copy given platform data */
  52        dpd = bcm63xx_voip_dsp_device.dev.platform_data;
  53        memcpy(dpd, pd, sizeof (*pd));
  54
  55        return platform_device_register(&bcm63xx_voip_dsp_device);
  56}
  57