Skip to content

Commit 90efa75

Browse files
shcgitgregkh
authored andcommitted
serial: sccnxp: Using CLK API for getting UART clock
This patch removes "frequency" parameter from SCCNXP platform_data and uses CLK API for getting clock. If CLK ommited, default IC frequency will be used instead. Signed-off-by: Alexander Shiyan <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent e087ab7 commit 90efa75

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

arch/mips/sni/a20r.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ static struct resource sc26xx_rsrc[] = {
122122

123123
static struct sccnxp_pdata sccnxp_data = {
124124
.reg_shift = 2,
125-
.frequency = 3686400,
126125
.mctrl_cfg[0] = MCTRL_SIG(DTR_OP, LINE_OP7) |
127126
MCTRL_SIG(RTS_OP, LINE_OP3) |
128127
MCTRL_SIG(DSR_IP, LINE_IP5) |

drivers/tty/serial/sccnxp.c

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#define SUPPORT_SYSRQ
1616
#endif
1717

18+
#include <linux/clk.h>
1819
#include <linux/err.h>
1920
#include <linux/module.h>
2021
#include <linux/device.h>
@@ -783,9 +784,10 @@ static int sccnxp_probe(struct platform_device *pdev)
783784
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
784785
int chiptype = pdev->id_entry->driver_data;
785786
struct sccnxp_pdata *pdata = dev_get_platdata(&pdev->dev);
786-
int i, ret, fifosize, freq_min, freq_max;
787+
int i, ret, fifosize, freq_min, freq_max, uartclk;
787788
struct sccnxp_port *s;
788789
void __iomem *membase;
790+
struct clk *clk;
789791

790792
membase = devm_ioremap_resource(&pdev->dev, res);
791793
if (IS_ERR(membase))
@@ -898,11 +900,25 @@ static int sccnxp_probe(struct platform_device *pdev)
898900
} else if (PTR_ERR(s->regulator) == -EPROBE_DEFER)
899901
return -EPROBE_DEFER;
900902

901-
if (!pdata) {
902-
dev_warn(&pdev->dev,
903-
"No platform data supplied, using defaults\n");
904-
s->pdata.frequency = s->freq_std;
903+
clk = devm_clk_get(&pdev->dev, NULL);
904+
if (IS_ERR(clk)) {
905+
if (PTR_ERR(clk) == -EPROBE_DEFER) {
906+
ret = -EPROBE_DEFER;
907+
goto err_out;
908+
}
909+
dev_notice(&pdev->dev, "Using default clock frequency\n");
910+
uartclk = s->freq_std;
905911
} else
912+
uartclk = clk_get_rate(clk);
913+
914+
/* Check input frequency */
915+
if ((uartclk < freq_min) || (uartclk > freq_max)) {
916+
dev_err(&pdev->dev, "Frequency out of bounds\n");
917+
ret = -EINVAL;
918+
goto err_out;
919+
}
920+
921+
if (pdata)
906922
memcpy(&s->pdata, pdata, sizeof(struct sccnxp_pdata));
907923

908924
if (s->pdata.poll_time_us) {
@@ -920,14 +936,6 @@ static int sccnxp_probe(struct platform_device *pdev)
920936
}
921937
}
922938

923-
/* Check input frequency */
924-
if ((s->pdata.frequency < freq_min) ||
925-
(s->pdata.frequency > freq_max)) {
926-
dev_err(&pdev->dev, "Frequency out of bounds\n");
927-
ret = -EINVAL;
928-
goto err_out;
929-
}
930-
931939
s->uart.owner = THIS_MODULE;
932940
s->uart.dev_name = "ttySC";
933941
s->uart.major = SCCNXP_MAJOR;
@@ -959,7 +967,7 @@ static int sccnxp_probe(struct platform_device *pdev)
959967
s->port[i].mapbase = res->start;
960968
s->port[i].membase = membase;
961969
s->port[i].regshift = s->pdata.reg_shift;
962-
s->port[i].uartclk = s->pdata.frequency;
970+
s->port[i].uartclk = uartclk;
963971
s->port[i].ops = &sccnxp_ops;
964972
uart_add_one_port(&s->uart, &s->port[i]);
965973
/* Set direction to input */

include/linux/platform_data/serial-sccnxp.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
* };
6161
*
6262
* static struct sccnxp_pdata sc2892_info = {
63-
* .frequency = 3686400,
6463
* .mctrl_cfg[0] = MCTRL_SIG(DIR_OP, LINE_OP0),
6564
* .mctrl_cfg[1] = MCTRL_SIG(DIR_OP, LINE_OP1),
6665
* };
@@ -78,8 +77,6 @@
7877

7978
/* SCCNXP platform data structure */
8079
struct sccnxp_pdata {
81-
/* Frequency (extrenal clock or crystal) */
82-
int frequency;
8380
/* Shift for A0 line */
8481
const u8 reg_shift;
8582
/* Modem control lines configuration */

0 commit comments

Comments
 (0)