.buf_size = CH_SYNC_BUF_SZ,
.on = ATOMIC_INIT(0),
.opencnt = ATOMIC_INIT(0),
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[0].rx_wq),
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[0].tx_wq),
.event_lock = __SPIN_LOCK_UNLOCKED(mlb_devinfo[0].event_lock),
},
{
.buf_size = CH_CTRL_BUF_SZ,
.on = ATOMIC_INIT(0),
.opencnt = ATOMIC_INIT(0),
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[1].rx_wq),
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[1].tx_wq),
.event_lock = __SPIN_LOCK_UNLOCKED(mlb_devinfo[1].event_lock),
},
{
.buf_size = CH_ASYNC_BUF_SZ,
.on = ATOMIC_INIT(0),
.opencnt = ATOMIC_INIT(0),
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[2].rx_wq),
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[2].tx_wq),
.event_lock = __SPIN_LOCK_UNLOCKED(mlb_devinfo[2].event_lock),
},
{
.buf_size = CH_ISOC_BUF_SZ,
.on = ATOMIC_INIT(0),
.opencnt = ATOMIC_INIT(0),
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[3].rx_wq),
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER(mlb_devinfo[3].tx_wq),
.event_lock = __SPIN_LOCK_UNLOCKED(mlb_devinfo[3].event_lock),
.isoc_blksz = CH_ISOC_BLK_SIZE_188,
},
return 0;
}
+/*
+ * Enable/Disable the MLB IRQ
+ */
+static void mxc_mlb150_irq_enable(struct mlb_data *drvdata, u8 enable)
+{
+ if (enable) {
+ enable_irq(drvdata->irq_ahb0);
+ enable_irq(drvdata->irq_ahb1);
+ enable_irq(drvdata->irq_mlb);
+ } else {
+ disable_irq(drvdata->irq_ahb0);
+ disable_irq(drvdata->irq_ahb1);
+ disable_irq(drvdata->irq_mlb);
+ }
+}
+
/*
* Enable the MLB channel
*/
pdevinfo->ex_event = 0;
pdevinfo->tx_ok = 0;
+ init_waitqueue_head(&pdevinfo->rx_wq);
+ init_waitqueue_head(&pdevinfo->tx_wq);
+
drvdata = container_of(inode->i_cdev, struct mlb_data, cdev);
drvdata->devinfo = pdevinfo;
+ mxc_mlb150_irq_enable(drvdata, 1);
filp->private_data = drvdata;
return 0;
struct mlb_dev_info *pdevinfo = drvdata->devinfo;
minor = MINOR(inode->i_rdev);
+ mxc_mlb150_irq_enable(drvdata, 0);
#ifdef DEBUG
mlb150_dev_dump_reg();
}
drvdata->devinfo = NULL;
+ mxc_mlb150_irq_enable(drvdata, 0);
platform_set_drvdata(pdev, drvdata);
return 0;