@@ -1619,6 +1619,43 @@ static struct uart_driver qcom_geni_uart_driver = {
1619
1619
.nr = GENI_UART_PORTS ,
1620
1620
};
1621
1621
1622
+ static int geni_serial_resource_init (struct qcom_geni_serial_port * port )
1623
+ {
1624
+ int ret ;
1625
+
1626
+ port -> se .clk = devm_clk_get (port -> se .dev , "se" );
1627
+ if (IS_ERR (port -> se .clk )) {
1628
+ ret = PTR_ERR (port -> se .clk );
1629
+ dev_err (port -> se .dev , "Err getting SE Core clk %d\n" , ret );
1630
+ return ret ;
1631
+ }
1632
+
1633
+ ret = geni_icc_get (& port -> se , NULL );
1634
+ if (ret )
1635
+ return ret ;
1636
+
1637
+ port -> se .icc_paths [GENI_TO_CORE ].avg_bw = GENI_DEFAULT_BW ;
1638
+ port -> se .icc_paths [CPU_TO_GENI ].avg_bw = GENI_DEFAULT_BW ;
1639
+
1640
+ /* Set BW for register access */
1641
+ ret = geni_icc_set_bw (& port -> se );
1642
+ if (ret )
1643
+ return ret ;
1644
+
1645
+ ret = devm_pm_opp_set_clkname (port -> se .dev , "se" );
1646
+ if (ret )
1647
+ return ret ;
1648
+
1649
+ /* OPP table is optional */
1650
+ ret = devm_pm_opp_of_add_table (port -> se .dev );
1651
+ if (ret && ret != - ENODEV ) {
1652
+ dev_err (port -> se .dev , "invalid OPP table in device tree\n" );
1653
+ return ret ;
1654
+ }
1655
+
1656
+ return 0 ;
1657
+ }
1658
+
1622
1659
static void qcom_geni_serial_pm (struct uart_port * uport ,
1623
1660
unsigned int new_state , unsigned int old_state )
1624
1661
{
@@ -1739,12 +1776,10 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
1739
1776
port -> dev_data = data ;
1740
1777
port -> se .dev = & pdev -> dev ;
1741
1778
port -> se .wrapper = dev_get_drvdata (pdev -> dev .parent );
1742
- port -> se .clk = devm_clk_get (& pdev -> dev , "se" );
1743
- if (IS_ERR (port -> se .clk )) {
1744
- ret = PTR_ERR (port -> se .clk );
1745
- dev_err (& pdev -> dev , "Err getting SE Core clk %d\n" , ret );
1779
+
1780
+ ret = geni_serial_resource_init (port );
1781
+ if (ret )
1746
1782
return ret ;
1747
- }
1748
1783
1749
1784
res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
1750
1785
if (!res )
@@ -1764,17 +1799,6 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
1764
1799
return - ENOMEM ;
1765
1800
}
1766
1801
1767
- ret = geni_icc_get (& port -> se , NULL );
1768
- if (ret )
1769
- return ret ;
1770
- port -> se .icc_paths [GENI_TO_CORE ].avg_bw = GENI_DEFAULT_BW ;
1771
- port -> se .icc_paths [CPU_TO_GENI ].avg_bw = GENI_DEFAULT_BW ;
1772
-
1773
- /* Set BW for register access */
1774
- ret = geni_icc_set_bw (& port -> se );
1775
- if (ret )
1776
- return ret ;
1777
-
1778
1802
port -> name = devm_kasprintf (uport -> dev , GFP_KERNEL ,
1779
1803
"qcom_geni_serial_%s%d" ,
1780
1804
uart_console (uport ) ? "console" : "uart" , uport -> line );
@@ -1796,16 +1820,6 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
1796
1820
if (of_property_read_bool (pdev -> dev .of_node , "cts-rts-swap" ))
1797
1821
port -> cts_rts_swap = true;
1798
1822
1799
- ret = devm_pm_opp_set_clkname (& pdev -> dev , "se" );
1800
- if (ret )
1801
- return ret ;
1802
- /* OPP table is optional */
1803
- ret = devm_pm_opp_of_add_table (& pdev -> dev );
1804
- if (ret && ret != - ENODEV ) {
1805
- dev_err (& pdev -> dev , "invalid OPP table in device tree\n" );
1806
- return ret ;
1807
- }
1808
-
1809
1823
port -> private_data .drv = drv ;
1810
1824
uport -> private_data = & port -> private_data ;
1811
1825
platform_set_drvdata (pdev , port );
0 commit comments