@@ -414,7 +414,6 @@ struct cdns_i3c_master {
414
414
} xferqueue ;
415
415
void __iomem * regs ;
416
416
struct clk * sysclk ;
417
- struct clk * pclk ;
418
417
struct cdns_i3c_master_caps caps ;
419
418
unsigned long i3c_scl_lim ;
420
419
const struct cdns_i3c_data * devdata ;
@@ -1551,6 +1550,7 @@ MODULE_DEVICE_TABLE(of, cdns_i3c_master_of_ids);
1551
1550
static int cdns_i3c_master_probe (struct platform_device * pdev )
1552
1551
{
1553
1552
struct cdns_i3c_master * master ;
1553
+ struct clk * pclk ;
1554
1554
int ret , irq ;
1555
1555
u32 val ;
1556
1556
@@ -1566,30 +1566,20 @@ static int cdns_i3c_master_probe(struct platform_device *pdev)
1566
1566
if (IS_ERR (master -> regs ))
1567
1567
return PTR_ERR (master -> regs );
1568
1568
1569
- master -> pclk = devm_clk_get (& pdev -> dev , "pclk" );
1570
- if (IS_ERR (master -> pclk ))
1571
- return PTR_ERR (master -> pclk );
1569
+ pclk = devm_clk_get_enabled (& pdev -> dev , "pclk" );
1570
+ if (IS_ERR (pclk ))
1571
+ return PTR_ERR (pclk );
1572
1572
1573
- master -> sysclk = devm_clk_get (& pdev -> dev , "sysclk" );
1573
+ master -> sysclk = devm_clk_get_enabled (& pdev -> dev , "sysclk" );
1574
1574
if (IS_ERR (master -> sysclk ))
1575
1575
return PTR_ERR (master -> sysclk );
1576
1576
1577
1577
irq = platform_get_irq (pdev , 0 );
1578
1578
if (irq < 0 )
1579
1579
return irq ;
1580
1580
1581
- ret = clk_prepare_enable (master -> pclk );
1582
- if (ret )
1583
- return ret ;
1584
-
1585
- ret = clk_prepare_enable (master -> sysclk );
1586
- if (ret )
1587
- goto err_disable_pclk ;
1588
-
1589
- if (readl (master -> regs + DEV_ID ) != DEV_ID_I3C_MASTER ) {
1590
- ret = - EINVAL ;
1591
- goto err_disable_sysclk ;
1592
- }
1581
+ if (readl (master -> regs + DEV_ID ) != DEV_ID_I3C_MASTER )
1582
+ return - EINVAL ;
1593
1583
1594
1584
spin_lock_init (& master -> xferqueue .lock );
1595
1585
INIT_LIST_HEAD (& master -> xferqueue .list );
@@ -1600,7 +1590,7 @@ static int cdns_i3c_master_probe(struct platform_device *pdev)
1600
1590
ret = devm_request_irq (& pdev -> dev , irq , cdns_i3c_master_interrupt , 0 ,
1601
1591
dev_name (& pdev -> dev ), master );
1602
1592
if (ret )
1603
- goto err_disable_sysclk ;
1593
+ return ret ;
1604
1594
1605
1595
platform_set_drvdata (pdev , master );
1606
1596
@@ -1622,29 +1612,15 @@ static int cdns_i3c_master_probe(struct platform_device *pdev)
1622
1612
master -> ibi .slots = devm_kcalloc (& pdev -> dev , master -> ibi .num_slots ,
1623
1613
sizeof (* master -> ibi .slots ),
1624
1614
GFP_KERNEL );
1625
- if (!master -> ibi .slots ) {
1626
- ret = - ENOMEM ;
1627
- goto err_disable_sysclk ;
1628
- }
1615
+ if (!master -> ibi .slots )
1616
+ return - ENOMEM ;
1629
1617
1630
1618
writel (IBIR_THR (1 ), master -> regs + CMD_IBI_THR_CTRL );
1631
1619
writel (MST_INT_IBIR_THR , master -> regs + MST_IER );
1632
1620
writel (DEVS_CTRL_DEV_CLR_ALL , master -> regs + DEVS_CTRL );
1633
1621
1634
- ret = i3c_master_register (& master -> base , & pdev -> dev ,
1635
- & cdns_i3c_master_ops , false);
1636
- if (ret )
1637
- goto err_disable_sysclk ;
1638
-
1639
- return 0 ;
1640
-
1641
- err_disable_sysclk :
1642
- clk_disable_unprepare (master -> sysclk );
1643
-
1644
- err_disable_pclk :
1645
- clk_disable_unprepare (master -> pclk );
1646
-
1647
- return ret ;
1622
+ return i3c_master_register (& master -> base , & pdev -> dev ,
1623
+ & cdns_i3c_master_ops , false);
1648
1624
}
1649
1625
1650
1626
static void cdns_i3c_master_remove (struct platform_device * pdev )
@@ -1653,9 +1629,6 @@ static void cdns_i3c_master_remove(struct platform_device *pdev)
1653
1629
1654
1630
cancel_work_sync (& master -> hj_work );
1655
1631
i3c_master_unregister (& master -> base );
1656
-
1657
- clk_disable_unprepare (master -> sysclk );
1658
- clk_disable_unprepare (master -> pclk );
1659
1632
}
1660
1633
1661
1634
static struct platform_driver cdns_i3c_master = {
0 commit comments