@@ -441,8 +441,6 @@ static struct mlb_dev_info mlb_devinfo[MLB_MINOR_DEVICES] = {
441
441
.buf_size = CH_SYNC_BUF_SZ ,
442
442
.on = ATOMIC_INIT (0 ),
443
443
.opencnt = ATOMIC_INIT (0 ),
444
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [0 ].rx_wq ),
445
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [0 ].tx_wq ),
446
444
.event_lock = __SPIN_LOCK_UNLOCKED (mlb_devinfo [0 ].event_lock ),
447
445
},
448
446
{
@@ -474,8 +472,6 @@ static struct mlb_dev_info mlb_devinfo[MLB_MINOR_DEVICES] = {
474
472
.buf_size = CH_CTRL_BUF_SZ ,
475
473
.on = ATOMIC_INIT (0 ),
476
474
.opencnt = ATOMIC_INIT (0 ),
477
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [1 ].rx_wq ),
478
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [1 ].tx_wq ),
479
475
.event_lock = __SPIN_LOCK_UNLOCKED (mlb_devinfo [1 ].event_lock ),
480
476
},
481
477
{
@@ -507,8 +503,6 @@ static struct mlb_dev_info mlb_devinfo[MLB_MINOR_DEVICES] = {
507
503
.buf_size = CH_ASYNC_BUF_SZ ,
508
504
.on = ATOMIC_INIT (0 ),
509
505
.opencnt = ATOMIC_INIT (0 ),
510
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [2 ].rx_wq ),
511
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [2 ].tx_wq ),
512
506
.event_lock = __SPIN_LOCK_UNLOCKED (mlb_devinfo [2 ].event_lock ),
513
507
},
514
508
{
@@ -540,8 +534,6 @@ static struct mlb_dev_info mlb_devinfo[MLB_MINOR_DEVICES] = {
540
534
.buf_size = CH_ISOC_BUF_SZ ,
541
535
.on = ATOMIC_INIT (0 ),
542
536
.opencnt = ATOMIC_INIT (0 ),
543
- .rx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [3 ].rx_wq ),
544
- .tx_wq = __WAIT_QUEUE_HEAD_INITIALIZER (mlb_devinfo [3 ].tx_wq ),
545
537
.event_lock = __SPIN_LOCK_UNLOCKED (mlb_devinfo [3 ].event_lock ),
546
538
.isoc_blksz = CH_ISOC_BLK_SIZE_188 ,
547
539
},
@@ -1555,6 +1547,22 @@ static s32 mlb150_trans_complete_check(struct mlb_dev_info *pdevinfo)
1555
1547
return 0 ;
1556
1548
}
1557
1549
1550
+ /*
1551
+ * Enable/Disable the MLB IRQ
1552
+ */
1553
+ static void mxc_mlb150_irq_enable (struct mlb_data * drvdata , u8 enable )
1554
+ {
1555
+ if (enable ) {
1556
+ enable_irq (drvdata -> irq_ahb0 );
1557
+ enable_irq (drvdata -> irq_ahb1 );
1558
+ enable_irq (drvdata -> irq_mlb );
1559
+ } else {
1560
+ disable_irq (drvdata -> irq_ahb0 );
1561
+ disable_irq (drvdata -> irq_ahb1 );
1562
+ disable_irq (drvdata -> irq_mlb );
1563
+ }
1564
+ }
1565
+
1558
1566
/*
1559
1567
* Enable the MLB channel
1560
1568
*/
@@ -1967,8 +1975,12 @@ static int mxc_mlb150_open(struct inode *inode, struct file *filp)
1967
1975
pdevinfo -> ex_event = 0 ;
1968
1976
pdevinfo -> tx_ok = 0 ;
1969
1977
1978
+ init_waitqueue_head (& pdevinfo -> rx_wq );
1979
+ init_waitqueue_head (& pdevinfo -> tx_wq );
1980
+
1970
1981
drvdata = container_of (inode -> i_cdev , struct mlb_data , cdev );
1971
1982
drvdata -> devinfo = pdevinfo ;
1983
+ mxc_mlb150_irq_enable (drvdata , 1 );
1972
1984
filp -> private_data = drvdata ;
1973
1985
1974
1986
return 0 ;
@@ -1981,6 +1993,7 @@ static int mxc_mlb150_release(struct inode *inode, struct file *filp)
1981
1993
struct mlb_dev_info * pdevinfo = drvdata -> devinfo ;
1982
1994
1983
1995
minor = MINOR (inode -> i_rdev );
1996
+ mxc_mlb150_irq_enable (drvdata , 0 );
1984
1997
1985
1998
#ifdef DEBUG
1986
1999
mlb150_dev_dump_reg ();
@@ -2633,6 +2646,7 @@ static int mxc_mlb150_probe(struct platform_device *pdev)
2633
2646
}
2634
2647
2635
2648
drvdata -> devinfo = NULL ;
2649
+ mxc_mlb150_irq_enable (drvdata , 0 );
2636
2650
platform_set_drvdata (pdev , drvdata );
2637
2651
return 0 ;
2638
2652
0 commit comments