提交 bfbdcf8a 编写于 作者: H Hiroshi DOYU 提交者: Tony Lindgren

ARM: OMAP: Fix Unbalanced enable for IRQ in omap mailbox

Signed-off-by: NHiroshi DOYU <Hiroshi.DOYU@nokia.com>
Signed-off-by: NTony Lindgren <tony@atomide.com>
上级 0692f05d
...@@ -70,6 +70,9 @@ struct omap_mbox2_priv { ...@@ -70,6 +70,9 @@ struct omap_mbox2_priv {
static struct clk *mbox_ick_handle; static struct clk *mbox_ick_handle;
static void omap2_mbox_enable_irq(struct omap_mbox *mbox,
omap_mbox_type_t irq);
static inline unsigned int mbox_read_reg(unsigned int reg) static inline unsigned int mbox_read_reg(unsigned int reg)
{ {
return __raw_readl(mbox_base + reg); return __raw_readl(mbox_base + reg);
...@@ -81,7 +84,7 @@ static inline void mbox_write_reg(unsigned int val, unsigned int reg) ...@@ -81,7 +84,7 @@ static inline void mbox_write_reg(unsigned int val, unsigned int reg)
} }
/* Mailbox H/W preparations */ /* Mailbox H/W preparations */
static inline int omap2_mbox_startup(struct omap_mbox *mbox) static int omap2_mbox_startup(struct omap_mbox *mbox)
{ {
unsigned int l; unsigned int l;
...@@ -97,38 +100,40 @@ static inline int omap2_mbox_startup(struct omap_mbox *mbox) ...@@ -97,38 +100,40 @@ static inline int omap2_mbox_startup(struct omap_mbox *mbox)
l |= 0x00000011; l |= 0x00000011;
mbox_write_reg(l, MAILBOX_SYSCONFIG); mbox_write_reg(l, MAILBOX_SYSCONFIG);
omap2_mbox_enable_irq(mbox, IRQ_RX);
return 0; return 0;
} }
static inline void omap2_mbox_shutdown(struct omap_mbox *mbox) static void omap2_mbox_shutdown(struct omap_mbox *mbox)
{ {
clk_disable(mbox_ick_handle); clk_disable(mbox_ick_handle);
clk_put(mbox_ick_handle); clk_put(mbox_ick_handle);
} }
/* Mailbox FIFO handle functions */ /* Mailbox FIFO handle functions */
static inline mbox_msg_t omap2_mbox_fifo_read(struct omap_mbox *mbox) static mbox_msg_t omap2_mbox_fifo_read(struct omap_mbox *mbox)
{ {
struct omap_mbox2_fifo *fifo = struct omap_mbox2_fifo *fifo =
&((struct omap_mbox2_priv *)mbox->priv)->rx_fifo; &((struct omap_mbox2_priv *)mbox->priv)->rx_fifo;
return (mbox_msg_t) mbox_read_reg(fifo->msg); return (mbox_msg_t) mbox_read_reg(fifo->msg);
} }
static inline void omap2_mbox_fifo_write(struct omap_mbox *mbox, mbox_msg_t msg) static void omap2_mbox_fifo_write(struct omap_mbox *mbox, mbox_msg_t msg)
{ {
struct omap_mbox2_fifo *fifo = struct omap_mbox2_fifo *fifo =
&((struct omap_mbox2_priv *)mbox->priv)->tx_fifo; &((struct omap_mbox2_priv *)mbox->priv)->tx_fifo;
mbox_write_reg(msg, fifo->msg); mbox_write_reg(msg, fifo->msg);
} }
static inline int omap2_mbox_fifo_empty(struct omap_mbox *mbox) static int omap2_mbox_fifo_empty(struct omap_mbox *mbox)
{ {
struct omap_mbox2_fifo *fifo = struct omap_mbox2_fifo *fifo =
&((struct omap_mbox2_priv *)mbox->priv)->rx_fifo; &((struct omap_mbox2_priv *)mbox->priv)->rx_fifo;
return (mbox_read_reg(fifo->msg_stat) == 0); return (mbox_read_reg(fifo->msg_stat) == 0);
} }
static inline int omap2_mbox_fifo_full(struct omap_mbox *mbox) static int omap2_mbox_fifo_full(struct omap_mbox *mbox)
{ {
struct omap_mbox2_fifo *fifo = struct omap_mbox2_fifo *fifo =
&((struct omap_mbox2_priv *)mbox->priv)->tx_fifo; &((struct omap_mbox2_priv *)mbox->priv)->tx_fifo;
...@@ -136,7 +141,7 @@ static inline int omap2_mbox_fifo_full(struct omap_mbox *mbox) ...@@ -136,7 +141,7 @@ static inline int omap2_mbox_fifo_full(struct omap_mbox *mbox)
} }
/* Mailbox IRQ handle functions */ /* Mailbox IRQ handle functions */
static inline void omap2_mbox_enable_irq(struct omap_mbox *mbox, static void omap2_mbox_enable_irq(struct omap_mbox *mbox,
omap_mbox_type_t irq) omap_mbox_type_t irq)
{ {
struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv;
...@@ -147,7 +152,7 @@ static inline void omap2_mbox_enable_irq(struct omap_mbox *mbox, ...@@ -147,7 +152,7 @@ static inline void omap2_mbox_enable_irq(struct omap_mbox *mbox,
mbox_write_reg(l, p->irqenable); mbox_write_reg(l, p->irqenable);
} }
static inline void omap2_mbox_disable_irq(struct omap_mbox *mbox, static void omap2_mbox_disable_irq(struct omap_mbox *mbox,
omap_mbox_type_t irq) omap_mbox_type_t irq)
{ {
struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv;
...@@ -158,7 +163,7 @@ static inline void omap2_mbox_disable_irq(struct omap_mbox *mbox, ...@@ -158,7 +163,7 @@ static inline void omap2_mbox_disable_irq(struct omap_mbox *mbox,
mbox_write_reg(l, p->irqenable); mbox_write_reg(l, p->irqenable);
} }
static inline void omap2_mbox_ack_irq(struct omap_mbox *mbox, static void omap2_mbox_ack_irq(struct omap_mbox *mbox,
omap_mbox_type_t irq) omap_mbox_type_t irq)
{ {
struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv;
...@@ -167,7 +172,7 @@ static inline void omap2_mbox_ack_irq(struct omap_mbox *mbox, ...@@ -167,7 +172,7 @@ static inline void omap2_mbox_ack_irq(struct omap_mbox *mbox,
mbox_write_reg(bit, p->irqstatus); mbox_write_reg(bit, p->irqstatus);
} }
static inline int omap2_mbox_is_irq(struct omap_mbox *mbox, static int omap2_mbox_is_irq(struct omap_mbox *mbox,
omap_mbox_type_t irq) omap_mbox_type_t irq)
{ {
struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv;
......
...@@ -355,7 +355,6 @@ static int omap_mbox_init(struct omap_mbox *mbox) ...@@ -355,7 +355,6 @@ static int omap_mbox_init(struct omap_mbox *mbox)
"failed to register mailbox interrupt:%d\n", ret); "failed to register mailbox interrupt:%d\n", ret);
goto fail_request_irq; goto fail_request_irq;
} }
enable_mbox_irq(mbox, IRQ_RX);
mq = mbox_queue_alloc(mbox, mbox_txq_fn, mbox_tx_work); mq = mbox_queue_alloc(mbox, mbox_txq_fn, mbox_tx_work);
if (!mq) { if (!mq) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册