Am 13.12.18 um 08:44 schrieb Rouven Czerwinski: > According to the device tree bindings for 8250, width is an optional property. > Default to 1 which is the same default value as used by the kernel. > Before this change the driver would not work for device trees which do not > include the optional binding. > > Signed-off-by: Rouven Czerwinski > --- > drivers/serial/serial_ns16550.c | 46 ++++++++++++++++----------------- > 1 file changed, 23 insertions(+), 23 deletions(-) > > diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c > index 4d73ea8b8..8ddcfdbef 100644 > --- a/drivers/serial/serial_ns16550.c > +++ b/drivers/serial/serial_ns16550.c > @@ -297,36 +297,36 @@ static int ns16550_tstc(struct console_device *cdev) > static void ns16550_probe_dt(struct device_d *dev, struct ns16550_priv *priv) > { > struct device_node *np = dev->device_node; > - u32 width; > + u32 width = 1; > > if (!IS_ENABLED(CONFIG_OFDEVICE)) > return; > > of_property_read_u32(np, "clock-frequency", &priv->plat.clock); > of_property_read_u32(np, "reg-shift", &priv->plat.shift); > - if (!of_property_read_u32(np, "reg-io-width", &width)) > - switch (width) { > - case 1: > - priv->read_reg = ns16550_read_reg_mmio_8; > - priv->write_reg = ns16550_write_reg_mmio_8; > - break; > - case 2: > - priv->read_reg = ns16550_read_reg_mmio_16; > - priv->write_reg = ns16550_write_reg_mmio_16; > - break; > - case 4: > - if (of_device_is_big_endian(np)) { > - priv->read_reg = ns16550_read_reg_mmio_32be; > - priv->write_reg = ns16550_write_reg_mmio_32be; > - } else { > - priv->read_reg = ns16550_read_reg_mmio_32; > - priv->write_reg = ns16550_write_reg_mmio_32; > - } > - break; > - default: > - dev_err(dev, "unsupported reg-io-width (%d)\n", > - width); > + of_property_read_u32(np, "reg-io-width", &width); i think it is not good to drop error handling completely. We may fail in different ways: static const void *of_find_property_value_of_size(const struct device_node *np, const char *propname, u32 len) { struct property *prop = of_find_property(np, propname, NULL); const void *value; if (!prop) return ERR_PTR(-EINVAL); value = of_property_get_value(prop); if (!value) return ERR_PTR(-ENODATA); if (len > prop->length) return ERR_PTR(-EOVERFLOW); return value; } > + switch (width) { > + case 1: > + priv->read_reg = ns16550_read_reg_mmio_8; > + priv->write_reg = ns16550_write_reg_mmio_8; > + break; > + case 2: > + priv->read_reg = ns16550_read_reg_mmio_16; > + priv->write_reg = ns16550_write_reg_mmio_16; > + break; > + case 4: > + if (of_device_is_big_endian(np)) { > + priv->read_reg = ns16550_read_reg_mmio_32be; > + priv->write_reg = ns16550_write_reg_mmio_32be; > + } else { > + priv->read_reg = ns16550_read_reg_mmio_32; > + priv->write_reg = ns16550_write_reg_mmio_32; > } > + break; > + default: > + dev_err(dev, "unsupported reg-io-width (%d)\n", > + width); > + } > } > > static struct ns16550_drvdata ns16450_drvdata = { > -- Regards, Oleksij