On Fri, Mar 15, 2013 at 09:06:23PM +0100, Maxime Ripard wrote: > + /* clock got configured through clk api, all done */ > + if (p->uartclk) if (IS_ERR(p->uartclk)) > + return 0; > + > + /* try to find out clock frequency from DT as fallback */ > if (of_property_read_u32(np, "clock-frequency", &val)) { > - dev_err(p->dev, "no clock-frequency property set\n"); > + dev_err(p->dev, "clk or clock-frequency not defined\n"); > return -EINVAL; > } > p->uartclk = val; > @@ -294,9 +301,21 @@ static int dw8250_probe(struct platform_device *pdev) > if (!uart.port.membase) > return -ENOMEM; > > + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); > + if (!data) > + return -ENOMEM; > + > + data->clk = devm_clk_get(&pdev->dev, NULL); > + if (IS_ERR(data->clk)) > + data->clk = NULL; > + else > + clk_prepare_enable(data->clk); if (!IS_ERR(data->clk)) clk_prepare_enable(data->clk); > + > uart.port.iotype = UPIO_MEM; > uart.port.serial_in = dw8250_serial_in; > uart.port.serial_out = dw8250_serial_out; > + uart.port.private_data = data; > + uart.port.uartclk = clk_get_rate(data->clk); What if data->clk is invalid? if (!IS_ERR(data->clk) uart.port.uartclk = clk_get_rate(data->clk); > > dw8250_setup_port(&uart); > > @@ -312,12 +331,6 @@ static int dw8250_probe(struct platform_device *pdev) > return -ENODEV; > } > > - data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); > - if (!data) > - return -ENOMEM; > - > - uart.port.private_data = data; > - > data->line = serial8250_register_8250_port(&uart); > if (data->line < 0) > return data->line; > @@ -333,6 +346,8 @@ static int dw8250_remove(struct platform_device *pdev) > > serial8250_unregister_port(data->line); > if (!IS_ERR(data->clk) > + clk_disable_unprepare(data->clk); > + > return 0; > } > > -- > 1.7.10.4 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html