@@ -1507,25 +1507,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
1507
1507
dev_err (dev ,
1508
1508
"Failed to get system configuration registers: %d\n" ,
1509
1509
ret );
1510
- return ret ;
1510
+ goto put_device ;
1511
1511
}
1512
1512
hdmi -> sys_regmap = regmap ;
1513
1513
1514
1514
mem = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
1515
1515
hdmi -> regs = devm_ioremap_resource (dev , mem );
1516
- if (IS_ERR (hdmi -> regs ))
1517
- return PTR_ERR (hdmi -> regs );
1516
+ if (IS_ERR (hdmi -> regs )) {
1517
+ ret = PTR_ERR (hdmi -> regs );
1518
+ goto put_device ;
1519
+ }
1518
1520
1519
1521
remote = of_graph_get_remote_node (np , 1 , 0 );
1520
- if (!remote )
1521
- return - EINVAL ;
1522
+ if (!remote ) {
1523
+ ret = - EINVAL ;
1524
+ goto put_device ;
1525
+ }
1522
1526
1523
1527
if (!of_device_is_compatible (remote , "hdmi-connector" )) {
1524
1528
hdmi -> next_bridge = of_drm_find_bridge (remote );
1525
1529
if (!hdmi -> next_bridge ) {
1526
1530
dev_err (dev , "Waiting for external bridge\n" );
1527
1531
of_node_put (remote );
1528
- return - EPROBE_DEFER ;
1532
+ ret = - EPROBE_DEFER ;
1533
+ goto put_device ;
1529
1534
}
1530
1535
}
1531
1536
@@ -1534,18 +1539,23 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
1534
1539
dev_err (dev , "Failed to find ddc-i2c-bus node in %pOF\n" ,
1535
1540
remote );
1536
1541
of_node_put (remote );
1537
- return - EINVAL ;
1542
+ ret = - EINVAL ;
1543
+ goto put_device ;
1538
1544
}
1539
1545
of_node_put (remote );
1540
1546
1541
1547
hdmi -> ddc_adpt = of_find_i2c_adapter_by_node (i2c_np );
1542
1548
of_node_put (i2c_np );
1543
1549
if (!hdmi -> ddc_adpt ) {
1544
1550
dev_err (dev , "Failed to get ddc i2c adapter by node\n" );
1545
- return - EINVAL ;
1551
+ ret = - EINVAL ;
1552
+ goto put_device ;
1546
1553
}
1547
1554
1548
1555
return 0 ;
1556
+ put_device :
1557
+ put_device (hdmi -> cec_dev );
1558
+ return ret ;
1549
1559
}
1550
1560
1551
1561
/*
0 commit comments