serial: max310x: Make use of device properties
PATCH v2 1/2 serial: max310x: Make use of device properties
Device property API allows to gather device resources from different sources, such as ACPI. Convert the drivers to unleash the power of device property API.
Signed-off-by Andy Shevchenko <[email protected]>
--- drivers/tty/serial/max310x.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-)
drivers/tty/serial/max310x.c +9 -18
@@ -15,8 +15,8 @@#include <linux/device.h> #include <linux/gpio/driver.h> #include <linux/module.h> -#include <linux/of.h> -#include <linux/of_device.h> +#include <linux/mod_devicetable.h> +#include <linux/property.h> #include <linux/regmap.h> #include <linux/serial_core.h> #include <linux/serial.h>
@@ -267,7 +267,7 @@ struct max310x_one { container_of(_port, struct max310x_one, port)struct max310x_port { -struct max310x_devtype *devtype; +const struct max310x_devtype *devtype;struct regmap *regmap;struct clk *clk;#ifdef CONFIG_GPIOLIB
@@ -1269,7 +1269,7 @@ static int max310x_gpio_set_config(struct gpio_chip *chip, unsigned int offset, }#endif -static int max310x_probe (struct device *dev,struct max310x_devtype *devtype, +static int max310x_probe (struct device *dev,const struct max310x_devtype *devtype,struct regmap *regmap,int irq) {int i, ret, fmin, fmax, freq, uartclk;
@@ -1478,7 +1478,7 @@ static struct regmap_config regcfg = {#ifdef CONFIG_SPI_MASTER static int max310x_spi_probe (struct spi_device *spi) { -struct max310x_devtype *devtype; +const struct max310x_devtype *devtype;struct regmap *regmap;int ret;
@@ -1490,18 +1490,9 @@ static int max310x_spi_probe(struct spi_device *spi)if (ret)return ret; -if (spi->dev.of_node) { -const struct of_device_id *of_id = -of_match_device (max310x_dt_ids, &spi->dev); -if (!of_id) -return -ENODEV ; - - devtype = (struct max310x_devtype *)of_id->data; - }else { -const struct spi_device_id *id_entry =spi_get_device_id (spi); - - devtype = (struct max310x_devtype *)id_entry->driver_data; - } + devtype =device_get_match_data (&spi->dev); +if (!devtype) + devtype = (struct max310x_devtype *)spi_get_device_id (spi)->driver_data; regcfg.max_register = devtype->nr *0x20 -1 ; regmap =devm_regmap_init_spi (spi, ®cfg);
@@ -1526,7 +1517,7 @@ MODULE_DEVICE_TABLE(spi, max310x_id_table);static struct spi_driver max310x_spi_driver = { .driver = { .name =MAX310X_NAME , - .of_match_table =of_match_ptr (max310x_dt_ids), + .of_match_table = max310x_dt_ids, .pm = &max310x_pm_ops, }, .probe = max310x_spi_probe,
Signature · 1 line
2.28.0
PATCH v2 2/2 serial: max310x: Use devm_clk_get_optional() to get the input clock
Simplify the code which fetches the input clock by using devm_clk_get_optional(). If no input clock is present devm_clk_get_optional() will return NULL instead of an error which matches the behavior of the old code.
Signed-off-by Andy Shevchenko <[email protected]>
--- drivers/tty/serial/max310x.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-)
drivers/tty/serial/max310x.c +15 -15
@@ -1273,7 +1273,6 @@ static int max310x_probe(struct device *dev, const struct max310x_devtype *devty struct regmap *regmap, int irq) { int i, ret, fmin, fmax, freq, uartclk; -struct clk *clk_osc, *clk_xtal;struct max310x_port *s;bool xtal = false;
@@ -1287,23 +1286,24 @@ static int max310x_probe(struct device *dev, const struct max310x_devtype *devtyreturn -ENOMEM ; } - clk_osc =devm_clk_get (dev,"osc" ); - clk_xtal =devm_clk_get (dev,"xtal" ); -if (!IS_ERR (clk_osc)) { - s->clk = clk_osc; + s->clk =devm_clk_get_optional (dev,"osc" ); +if (IS_ERR (s->clk)) +return PTR_ERR (s->clk); +if (s->clk) { fmin =500000 ; fmax =35000000 ; - }else if (!IS_ERR (clk_xtal)) { - s->clk = clk_xtal; - fmin =1000000 ; - fmax =4000000 ; - xtal = true; - }else if (PTR_ERR (clk_osc) == -EPROBE_DEFER || -PTR_ERR (clk_xtal) == -EPROBE_DEFER ) { -return -EPROBE_DEFER ; }else { -dev_err (dev,"Cannot get clock\n" ); -return -EINVAL ; + s->clk =devm_clk_get_optional (dev,"xtal" ); +if (IS_ERR (s->clk)) +return PTR_ERR (s->clk); +if (s->clk) { + fmin =1000000 ; + fmax =4000000 ; + xtal = true; + }else { +dev_err (dev,"Cannot get clock\n" ); +return -EINVAL ; + } } ret =clk_prepare_enable (s->clk);
Signature · 1 line
2.28.0