[PATCH 5/7] ARM: OMAP2+: mbox: remove dependencies with soc.h
Russ Dill
Russ.Dill at ti.com
Sat Jun 8 15:16:08 EDT 2013
On Fri, Jun 7, 2013 at 6:58 PM, Suman Anna <s-anna at ti.com> wrote:
> The OMAP mailbox platform driver code has been cleaned up to
> remove the dependencies with soc.h in preparation for moving
> the mailbox code to drivers folder.
>
> The code relied on cpu_is_xxx/soc_is_xxx macros previously to
> pick the the right set of mailbox devices and register with the
> mailbox driver. This data is now represented in a concise format
> and moved to the respective omap_hwmod data files and published
> to the driver through the platform data.
I have some comments on how the cpu_is_xxx/soc_is_xxx was done. In its
current form, intr_type is just a sub for cpu_is_omap44xx(). I'd like
to see the scope of that parameter reduced a bit and have the changes
match the model of gpio-omap.c a little better (see 4e962e89 for an
example). Comments inline.
> Cc: Paul Walmsley <paul at pwsan.com>
> Signed-off-by: Suman Anna <s-anna at ti.com>
> ---
> arch/arm/mach-omap2/devices.c | 9 +-
> arch/arm/mach-omap2/mailbox.c | 250 ++++++++++-------------------
> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 12 ++
> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 11 ++
> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 11 ++
> arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 13 ++
> arch/arm/plat-omap/include/plat/mailbox.h | 2 +-
> include/linux/platform_data/mailbox-omap.h | 53 ++++++
> 8 files changed, 198 insertions(+), 163 deletions(-)
> create mode 100644 include/linux/platform_data/mailbox-omap.h
>
> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> index 4269fc1..4c97a86 100644
> --- a/arch/arm/mach-omap2/devices.c
> +++ b/arch/arm/mach-omap2/devices.c
> @@ -20,6 +20,7 @@
> #include <linux/pinctrl/machine.h>
> #include <linux/platform_data/omap4-keypad.h>
> #include <linux/platform_data/omap_ocp2scp.h>
> +#include <linux/platform_data/mailbox-omap.h>
> #include <linux/usb/omap_control_usb.h>
>
> #include <asm/mach-types.h>
> @@ -332,14 +333,20 @@ static inline void __init omap_init_mbox(void)
> {
> struct omap_hwmod *oh;
> struct platform_device *pdev;
> + struct omap_mbox_pdata *pdata;
>
> oh = omap_hwmod_lookup("mailbox");
> if (!oh) {
> pr_err("%s: unable to find hwmod\n", __func__);
> return;
> }
> + if (!oh->dev_attr) {
> + pr_err("%s: hwmod doesn't have valid attrs\n", __func__);
> + return;
> + }
>
> - pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0);
> + pdata = (struct omap_mbox_pdata *)oh->dev_attr;
> + pdev = omap_device_build("omap-mailbox", -1, oh, pdata, sizeof(*pdata));
> WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n",
> __func__, PTR_ERR(pdev));
> }
> diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
> index b01aae6..fcb425c 100644
> --- a/arch/arm/mach-omap2/mailbox.c
> +++ b/arch/arm/mach-omap2/mailbox.c
> @@ -11,16 +11,16 @@
> */
>
> #include <linux/module.h>
> +#include <linux/slab.h>
> #include <linux/clk.h>
> #include <linux/err.h>
> #include <linux/platform_device.h>
> #include <linux/io.h>
> #include <linux/pm_runtime.h>
> +#include <linux/platform_data/mailbox-omap.h>
>
> #include <plat/mailbox.h>
>
> -#include "soc.h"
> -
> #define MAILBOX_REVISION 0x000
> #define MAILBOX_MESSAGE(m) (0x040 + 4 * (m))
> #define MAILBOX_FIFOSTATUS(m) (0x080 + 4 * (m))
> @@ -59,6 +59,7 @@ struct omap_mbox2_priv {
> u32 notfull_bit;
> u32 ctx[OMAP4_MBOX_NR_REGS];
> unsigned long irqdisable;
> + u32 intr_type;
> };
>
> static inline unsigned int mbox_read_reg(size_t ofs)
> @@ -136,7 +137,7 @@ static void omap2_mbox_disable_irq(struct omap_mbox *mbox, omap_mbox_irq_t irq)
> struct omap_mbox2_priv *p = mbox->priv;
> u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit;
>
> - if (!cpu_is_omap44xx())
> + if (!p->intr_type)
> bit = mbox_read_reg(p->irqdisable) & ~bit;
This part here should really be the scope of intr_type. Is there any
way to name it better though? An indication of what it's actually
doing?
> mbox_write_reg(bit, p->irqdisable);
> @@ -168,7 +169,8 @@ static void omap2_mbox_save_ctx(struct omap_mbox *mbox)
> int i;
> struct omap_mbox2_priv *p = mbox->priv;
> int nr_regs;
> - if (cpu_is_omap44xx())
> +
> + if (p->intr_type)
> nr_regs = OMAP4_MBOX_NR_REGS;
> else
> nr_regs = MBOX_NR_REGS;
Here it would seem to be better to put nr_regs in pdata.
> @@ -185,7 +187,8 @@ static void omap2_mbox_restore_ctx(struct omap_mbox *mbox)
> int i;
> struct omap_mbox2_priv *p = mbox->priv;
> int nr_regs;
> - if (cpu_is_omap44xx())
> +
> + if (p->intr_type)
> nr_regs = OMAP4_MBOX_NR_REGS;
> else
> nr_regs = MBOX_NR_REGS;
Same here.
> @@ -213,188 +216,113 @@ static struct omap_mbox_ops omap2_mbox_ops = {
> .restore_ctx = omap2_mbox_restore_ctx,
> };
>
> -/*
> - * MAILBOX 0: ARM -> DSP,
> - * MAILBOX 1: ARM <- DSP.
> - * MAILBOX 2: ARM -> IVA,
> - * MAILBOX 3: ARM <- IVA.
> - */
> -
> -/* FIXME: the following structs should be filled automatically by the user id */
> -
> -#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP2)
> -/* DSP */
> -static struct omap_mbox2_priv omap2_mbox_dsp_priv = {
> - .tx_fifo = {
> - .msg = MAILBOX_MESSAGE(0),
> - .fifo_stat = MAILBOX_FIFOSTATUS(0),
> - },
> - .rx_fifo = {
> - .msg = MAILBOX_MESSAGE(1),
> - .msg_stat = MAILBOX_MSGSTATUS(1),
> - },
> - .irqenable = MAILBOX_IRQENABLE(0),
> - .irqstatus = MAILBOX_IRQSTATUS(0),
> - .notfull_bit = MAILBOX_IRQ_NOTFULL(0),
> - .newmsg_bit = MAILBOX_IRQ_NEWMSG(1),
> - .irqdisable = MAILBOX_IRQENABLE(0),
> -};
> -
> -struct omap_mbox mbox_dsp_info = {
> - .name = "dsp",
> - .ops = &omap2_mbox_ops,
> - .priv = &omap2_mbox_dsp_priv,
> -};
> -#endif
> -
> -#if defined(CONFIG_ARCH_OMAP3)
> -struct omap_mbox *omap3_mboxes[] = { &mbox_dsp_info, NULL };
> -#endif
> -
> -#if defined(CONFIG_SOC_OMAP2420)
> -/* IVA */
> -static struct omap_mbox2_priv omap2_mbox_iva_priv = {
> - .tx_fifo = {
> - .msg = MAILBOX_MESSAGE(2),
> - .fifo_stat = MAILBOX_FIFOSTATUS(2),
> - },
> - .rx_fifo = {
> - .msg = MAILBOX_MESSAGE(3),
> - .msg_stat = MAILBOX_MSGSTATUS(3),
> - },
> - .irqenable = MAILBOX_IRQENABLE(3),
> - .irqstatus = MAILBOX_IRQSTATUS(3),
> - .notfull_bit = MAILBOX_IRQ_NOTFULL(2),
> - .newmsg_bit = MAILBOX_IRQ_NEWMSG(3),
> - .irqdisable = MAILBOX_IRQENABLE(3),
> -};
> -
> -static struct omap_mbox mbox_iva_info = {
> - .name = "iva",
> - .ops = &omap2_mbox_ops,
> - .priv = &omap2_mbox_iva_priv,
> -};
> -#endif
> -
> -#ifdef CONFIG_ARCH_OMAP2
> -struct omap_mbox *omap2_mboxes[] = {
> - &mbox_dsp_info,
> -#ifdef CONFIG_SOC_OMAP2420
> - &mbox_iva_info,
> -#endif
> - NULL
> -};
> -#endif
> -
> -#if defined(CONFIG_ARCH_OMAP4)
> -/* OMAP4 */
> -static struct omap_mbox2_priv omap2_mbox_1_priv = {
> - .tx_fifo = {
> - .msg = MAILBOX_MESSAGE(0),
> - .fifo_stat = MAILBOX_FIFOSTATUS(0),
> - },
> - .rx_fifo = {
> - .msg = MAILBOX_MESSAGE(1),
> - .msg_stat = MAILBOX_MSGSTATUS(1),
> - },
> - .irqenable = OMAP4_MAILBOX_IRQENABLE(0),
> - .irqstatus = OMAP4_MAILBOX_IRQSTATUS(0),
> - .notfull_bit = MAILBOX_IRQ_NOTFULL(0),
> - .newmsg_bit = MAILBOX_IRQ_NEWMSG(1),
> - .irqdisable = OMAP4_MAILBOX_IRQENABLE_CLR(0),
> -};
> -
> -struct omap_mbox mbox_1_info = {
> - .name = "mailbox-1",
> - .ops = &omap2_mbox_ops,
> - .priv = &omap2_mbox_1_priv,
> -};
> -
> -static struct omap_mbox2_priv omap2_mbox_2_priv = {
> - .tx_fifo = {
> - .msg = MAILBOX_MESSAGE(3),
> - .fifo_stat = MAILBOX_FIFOSTATUS(3),
> - },
> - .rx_fifo = {
> - .msg = MAILBOX_MESSAGE(2),
> - .msg_stat = MAILBOX_MSGSTATUS(2),
> - },
> - .irqenable = OMAP4_MAILBOX_IRQENABLE(0),
> - .irqstatus = OMAP4_MAILBOX_IRQSTATUS(0),
> - .notfull_bit = MAILBOX_IRQ_NOTFULL(3),
> - .newmsg_bit = MAILBOX_IRQ_NEWMSG(2),
> - .irqdisable = OMAP4_MAILBOX_IRQENABLE_CLR(0),
> -};
> -
> -struct omap_mbox mbox_2_info = {
> - .name = "mailbox-2",
> - .ops = &omap2_mbox_ops,
> - .priv = &omap2_mbox_2_priv,
> -};
> -
> -struct omap_mbox *omap4_mboxes[] = { &mbox_1_info, &mbox_2_info, NULL };
> -#endif
> -
> static int omap2_mbox_probe(struct platform_device *pdev)
> {
> struct resource *mem;
> int ret;
> - struct omap_mbox **list;
> -
> - if (false)
> - ;
> -#if defined(CONFIG_ARCH_OMAP3)
> - else if (cpu_is_omap34xx()) {
> - list = omap3_mboxes;
> + struct omap_mbox **list, *mbox, *mboxblk;
> + struct omap_mbox2_priv *priv, *privblk;
> + struct omap_mbox_pdata *pdata = pdev->dev.platform_data;
> + struct omap_mbox_dev_info *info;
> + int i;
>
> - list[0]->irq = platform_get_irq(pdev, 0);
> + if (!pdata || !pdata->info_cnt || !pdata->info) {
> + pr_err("%s: platform not supported\n", __func__);
> + return -ENODEV;
> }
> -#endif
> -#if defined(CONFIG_ARCH_OMAP2)
> - else if (cpu_is_omap2430()) {
> - list = omap2_mboxes;
>
> - list[0]->irq = platform_get_irq(pdev, 0);
> - } else if (cpu_is_omap2420()) {
> - list = omap2_mboxes;
> + /* allocate one extra for marking end of list */
> + list = kzalloc((pdata->info_cnt + 1) * sizeof(*list), GFP_KERNEL);
> + if (!list)
> + return -ENOMEM;
>
> - list[0]->irq = platform_get_irq_byname(pdev, "dsp");
> - list[1]->irq = platform_get_irq_byname(pdev, "iva");
> + mboxblk = mbox = kzalloc(pdata->info_cnt * sizeof(*mbox), GFP_KERNEL);
> + if (!mboxblk) {
> + ret = -ENOMEM;
> + goto free_list;
> }
> -#endif
> -#if defined(CONFIG_ARCH_OMAP4)
> - else if (cpu_is_omap44xx()) {
> - list = omap4_mboxes;
>
> - list[0]->irq = list[1]->irq = platform_get_irq(pdev, 0);
> + privblk = priv = kzalloc(pdata->info_cnt * sizeof(*priv), GFP_KERNEL);
> + if (!privblk) {
> + ret = -ENOMEM;
> + goto free_mboxblk;
> }
> -#endif
> - else {
> - pr_err("%s: platform not supported\n", __func__);
> - return -ENODEV;
> +
> + info = pdata->info;
> + for (i = 0; i < pdata->info_cnt; i++, info++, priv++) {
> + priv->tx_fifo.msg = MAILBOX_MESSAGE(info->tx_id);
> + priv->tx_fifo.fifo_stat = MAILBOX_FIFOSTATUS(info->tx_id);
> + priv->rx_fifo.msg = MAILBOX_MESSAGE(info->rx_id);
> + priv->rx_fifo.msg_stat = MAILBOX_MSGSTATUS(info->rx_id);
> + priv->notfull_bit = MAILBOX_IRQ_NOTFULL(info->tx_id);
> + priv->newmsg_bit = MAILBOX_IRQ_NEWMSG(info->rx_id);
> + if (pdata->intr_type) {
> + priv->irqenable = OMAP4_MAILBOX_IRQENABLE(info->usr_id);
> + priv->irqstatus = OMAP4_MAILBOX_IRQSTATUS(info->usr_id);
> + priv->irqdisable =
> + OMAP4_MAILBOX_IRQENABLE_CLR(info->usr_id);
> + } else {
> + priv->irqenable = MAILBOX_IRQENABLE(info->usr_id);
> + priv->irqstatus = MAILBOX_IRQSTATUS(info->usr_id);
> + priv->irqdisable = MAILBOX_IRQENABLE(info->usr_id);
> + }
And here it would be better to put these three registers in pdata.
> + priv->intr_type = pdata->intr_type;
> +
> + mbox->priv = priv;
> + mbox->name = info->name;
> + mbox->ops = &omap2_mbox_ops;
> + mbox->irq = platform_get_irq(pdev, info->irq_id);
> + if (mbox->irq < 0) {
> + ret = mbox->irq;
> + goto free_privblk;
> + }
> + list[i] = mbox++;
> }
>
> mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> - if (!mem)
> - return -ENOENT;
> + if (!mem) {
> + ret = -ENOENT;
> + goto free_privblk;
> + }
>
> mbox_base = ioremap(mem->start, resource_size(mem));
> - if (!mbox_base)
> - return -ENOMEM;
> + if (!mbox_base) {
> + ret = -ENOMEM;
> + goto free_privblk;
> + }
>
> ret = omap_mbox_register(&pdev->dev, list);
> - if (ret) {
> - iounmap(mbox_base);
> - return ret;
> - }
> + if (ret)
> + goto unmap_mbox;
> + platform_set_drvdata(pdev, list);
>
> return 0;
> +
> +unmap_mbox:
> + iounmap(mbox_base);
> +free_privblk:
> + kfree(privblk);
> +free_mboxblk:
> + kfree(mboxblk);
> +free_list:
> + kfree(list);
> + return ret;
> }
>
> static int omap2_mbox_remove(struct platform_device *pdev)
> {
> + struct omap_mbox2_priv *privblk;
> + struct omap_mbox **list = platform_get_drvdata(pdev);
> + struct omap_mbox *mboxblk = list[0];
> +
> + privblk = mboxblk->priv;
> omap_mbox_unregister();
> iounmap(mbox_base);
> + kfree(privblk);
> + kfree(mboxblk);
> + kfree(list);
> + platform_set_drvdata(pdev, NULL);
> +
> return 0;
> }
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> index 5137cc8..dbcb928 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> @@ -16,6 +16,7 @@
> #include <linux/i2c-omap.h>
> #include <linux/platform_data/spi-omap2-mcspi.h>
> #include <linux/omap-dma.h>
> +#include <linux/platform_data/mailbox-omap.h>
> #include <plat/dmtimer.h>
>
> #include "omap_hwmod.h"
> @@ -166,6 +167,16 @@ static struct omap_hwmod omap2420_dma_system_hwmod = {
> };
>
> /* mailbox */
> +static struct omap_mbox_dev_info omap2420_mailbox_info[] = {
> + { .name = "dsp", .tx_id = 0, .rx_id = 1, .irq_id = 0, .usr_id = 0 },
> + { .name = "iva", .tx_id = 2, .rx_id = 3, .irq_id = 1, .usr_id = 3 },
> +};
> +
> +static struct omap_mbox_pdata omap2420_mailbox_attrs = {
> + .info_cnt = ARRAY_SIZE(omap2420_mailbox_info),
> + .info = omap2420_mailbox_info,
> +};
> +
> static struct omap_hwmod_irq_info omap2420_mailbox_irqs[] = {
> { .name = "dsp", .irq = 26 + OMAP_INTC_START, },
> { .name = "iva", .irq = 34 + OMAP_INTC_START, },
> @@ -186,6 +197,7 @@ static struct omap_hwmod omap2420_mailbox_hwmod = {
> .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
> },
> },
> + .dev_attr = &omap2420_mailbox_attrs,
> };
>
> /*
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> index 4ce999e..df2f874 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> @@ -17,6 +17,7 @@
> #include <linux/platform_data/asoc-ti-mcbsp.h>
> #include <linux/platform_data/spi-omap2-mcspi.h>
> #include <linux/omap-dma.h>
> +#include <linux/platform_data/mailbox-omap.h>
> #include <plat/dmtimer.h>
>
> #include "omap_hwmod.h"
> @@ -170,6 +171,15 @@ static struct omap_hwmod omap2430_dma_system_hwmod = {
> };
>
> /* mailbox */
> +static struct omap_mbox_dev_info omap2430_mailbox_info[] = {
> + { .name = "dsp", .tx_id = 0, .rx_id = 1 },
> +};
> +
> +static struct omap_mbox_pdata omap2430_mailbox_attrs = {
> + .info_cnt = ARRAY_SIZE(omap2430_mailbox_info),
> + .info = omap2430_mailbox_info,
> +};
> +
> static struct omap_hwmod_irq_info omap2430_mailbox_irqs[] = {
> { .irq = 26 + OMAP_INTC_START, },
> { .irq = -1 },
> @@ -189,6 +199,7 @@ static struct omap_hwmod omap2430_mailbox_hwmod = {
> .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
> },
> },
> + .dev_attr = &omap2430_mailbox_attrs,
> };
>
> /* mcspi3 */
> diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> index 31c7126..9ac5122 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> @@ -25,6 +25,7 @@
> #include <linux/platform_data/asoc-ti-mcbsp.h>
> #include <linux/platform_data/spi-omap2-mcspi.h>
> #include <linux/platform_data/iommu-omap.h>
> +#include <linux/platform_data/mailbox-omap.h>
> #include <plat/dmtimer.h>
>
> #include "am35xx.h"
> @@ -1505,6 +1506,15 @@ static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
> .sysc = &omap3xxx_mailbox_sysc,
> };
>
> +static struct omap_mbox_dev_info omap3xxx_mailbox_info[] = {
> + { .name = "dsp", .tx_id = 0, .rx_id = 1 },
> +};
> +
> +static struct omap_mbox_pdata omap3xxx_mailbox_attrs = {
> + .info_cnt = ARRAY_SIZE(omap3xxx_mailbox_info),
> + .info = omap3xxx_mailbox_info,
> +};
> +
> static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = {
> { .irq = 26 + OMAP_INTC_START, },
> { .irq = -1 },
> @@ -1524,6 +1534,7 @@ static struct omap_hwmod omap3xxx_mailbox_hwmod = {
> .idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
> },
> },
> + .dev_attr = &omap3xxx_mailbox_attrs,
> };
>
> /*
> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> index 848b6dc..4065962 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> @@ -29,6 +29,7 @@
> #include <linux/platform_data/spi-omap2-mcspi.h>
> #include <linux/platform_data/asoc-ti-mcbsp.h>
> #include <linux/platform_data/iommu-omap.h>
> +#include <linux/platform_data/mailbox-omap.h>
> #include <plat/dmtimer.h>
>
> #include "omap_hwmod.h"
> @@ -1861,6 +1862,17 @@ static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
> };
>
> /* mailbox */
> +static struct omap_mbox_dev_info omap44xx_mailbox_info[] = {
> + { .name = "mbox-ipu", .tx_id = 0, .rx_id = 1 },
> + { .name = "mbox-dsp", .tx_id = 3, .rx_id = 2 },
> +};
> +
> +static struct omap_mbox_pdata omap44xx_mailbox_attrs = {
> + .intr_type = MBOX_INTR_CFG_TYPE2,
> + .info_cnt = ARRAY_SIZE(omap44xx_mailbox_info),
> + .info = omap44xx_mailbox_info,
> +};
> +
> static struct omap_hwmod_irq_info omap44xx_mailbox_irqs[] = {
> { .irq = 26 + OMAP44XX_IRQ_GIC_START },
> { .irq = -1 }
> @@ -1877,6 +1889,7 @@ static struct omap_hwmod omap44xx_mailbox_hwmod = {
> .context_offs = OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
> },
> },
> + .dev_attr = &omap44xx_mailbox_attrs,
> };
>
> /*
> diff --git a/arch/arm/plat-omap/include/plat/mailbox.h b/arch/arm/plat-omap/include/plat/mailbox.h
> index cc3921e..e98f7e2 100644
> --- a/arch/arm/plat-omap/include/plat/mailbox.h
> +++ b/arch/arm/plat-omap/include/plat/mailbox.h
> @@ -51,7 +51,7 @@ struct omap_mbox_queue {
> };
>
> struct omap_mbox {
> - char *name;
> + const char *name;
> unsigned int irq;
> struct omap_mbox_queue *txq, *rxq;
> struct omap_mbox_ops *ops;
> diff --git a/include/linux/platform_data/mailbox-omap.h b/include/linux/platform_data/mailbox-omap.h
> new file mode 100644
> index 0000000..676cd64
> --- /dev/null
> +++ b/include/linux/platform_data/mailbox-omap.h
> @@ -0,0 +1,53 @@
> +/*
> + * mailbox-omap.h
> + *
> + * Copyright (C) 2013 Texas Instruments, Inc.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * version 2 as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef _PLAT_MAILBOX_H
> +#define _PLAT_MAILBOX_H
> +
> +/* Interrupt register configuration types */
> +#define MBOX_INTR_CFG_TYPE1 (0)
> +#define MBOX_INTR_CFG_TYPE2 (1)
> +
> +/**
> + * struct omap_mbox_dev_info - OMAP mailbox device attribute info
> + * @name: name of the mailbox device
> + * @tx_id: mailbox queue id used for transmitting messages
> + * @rx_id: mailbox queue id on which messages are received
> + * @irq_id: irq identifier number to use from the hwmod data
> + * @usr_id: mailbox user id for identifying the interrupt into
> + * the MPU interrupt controller.
> + */
> +struct omap_mbox_dev_info {
> + const char *name;
> + u32 tx_id;
> + u32 rx_id;
> + u32 irq_id;
> + u32 usr_id;
> +};
> +
> +/**
> + * struct omap_mbox_pdata - OMAP mailbox platform data
> + * @intr_type: type of interrupt configuration registers used
> + while programming mailbox queue interrupts
> + * @info_cnt: number of mailbox devices for the platform
> + * @info: array of mailbox device attributes
> + */
> +struct omap_mbox_pdata {
> + u32 intr_type;
> + u32 info_cnt;
> + struct omap_mbox_dev_info *info;
> +};
> +
> +#endif /* _PLAT_MAILBOX_H */
> --
> 1.8.2
>
> --
> 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
More information about the linux-arm-kernel
mailing list