Skip to content

Commit 94d6914

Browse files
Praveen Talarigregkh
authored andcommitted
serial: qcom-geni: move resource control logic to separate functions
Supports use in PM system/runtime frameworks, helping to distinguish new resource control mechanisms and facilitate future modifications within the new API. The code that handles the actual enable or disable of resources like clock and ICC paths to a separate function (geni_serial_resources_on() and geni_serial_resources_off()) which enhances code readability. Introduced minor return checks in newly added function APIs to enhance error detection and prevent silent failures. Signed-off-by: Praveen Talari <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 4b2601a commit 94d6914

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

drivers/tty/serial/qcom_geni_serial.c

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,6 +1619,42 @@ static struct uart_driver qcom_geni_uart_driver = {
16191619
.nr = GENI_UART_PORTS,
16201620
};
16211621

1622+
static int geni_serial_resources_on(struct uart_port *uport)
1623+
{
1624+
struct qcom_geni_serial_port *port = to_dev_port(uport);
1625+
int ret;
1626+
1627+
ret = geni_icc_enable(&port->se);
1628+
if (ret)
1629+
return ret;
1630+
1631+
ret = geni_se_resources_on(&port->se);
1632+
if (ret) {
1633+
geni_icc_disable(&port->se);
1634+
return ret;
1635+
}
1636+
1637+
if (port->clk_rate)
1638+
dev_pm_opp_set_rate(uport->dev, port->clk_rate);
1639+
1640+
return 0;
1641+
}
1642+
1643+
static int geni_serial_resources_off(struct uart_port *uport)
1644+
{
1645+
struct qcom_geni_serial_port *port = to_dev_port(uport);
1646+
int ret;
1647+
1648+
dev_pm_opp_set_rate(uport->dev, 0);
1649+
ret = geni_se_resources_off(&port->se);
1650+
if (ret)
1651+
return ret;
1652+
1653+
geni_icc_disable(&port->se);
1654+
1655+
return 0;
1656+
}
1657+
16221658
static int geni_serial_resource_init(struct qcom_geni_serial_port *port)
16231659
{
16241660
int ret;
@@ -1659,23 +1695,17 @@ static int geni_serial_resource_init(struct qcom_geni_serial_port *port)
16591695
static void qcom_geni_serial_pm(struct uart_port *uport,
16601696
unsigned int new_state, unsigned int old_state)
16611697
{
1662-
struct qcom_geni_serial_port *port = to_dev_port(uport);
16631698

16641699
/* If we've never been called, treat it as off */
16651700
if (old_state == UART_PM_STATE_UNDEFINED)
16661701
old_state = UART_PM_STATE_OFF;
16671702

1668-
if (new_state == UART_PM_STATE_ON && old_state == UART_PM_STATE_OFF) {
1669-
geni_icc_enable(&port->se);
1670-
if (port->clk_rate)
1671-
dev_pm_opp_set_rate(uport->dev, port->clk_rate);
1672-
geni_se_resources_on(&port->se);
1673-
} else if (new_state == UART_PM_STATE_OFF &&
1674-
old_state == UART_PM_STATE_ON) {
1675-
geni_se_resources_off(&port->se);
1676-
dev_pm_opp_set_rate(uport->dev, 0);
1677-
geni_icc_disable(&port->se);
1678-
}
1703+
if (new_state == UART_PM_STATE_ON && old_state == UART_PM_STATE_OFF)
1704+
geni_serial_resources_on(uport);
1705+
else if (new_state == UART_PM_STATE_OFF &&
1706+
old_state == UART_PM_STATE_ON)
1707+
geni_serial_resources_off(uport);
1708+
16791709
}
16801710

16811711
/**

0 commit comments

Comments
 (0)