Current serial device driver has the common sysfs I/F for all serial devices, but it does not have device specific sysfs I/F. To make device specific sysfs I/F, this patch introduces device specific attribute group to uart_port structure. Changes in V8: - Divide this patch from V7's patch based on Greg's comment Signed-off-by: Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@xxxxxxxxxxx> --- drivers/tty/serial/serial_core.c | 18 +++++++++++------- include/linux/serial_core.h | 4 ++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index b68550d..524cb49 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -2552,15 +2552,16 @@ static struct attribute *tty_dev_attrs[] = { NULL, }; -static const struct attribute_group tty_dev_attr_group = { +static struct attribute_group tty_dev_attr_group = { .attrs = tty_dev_attrs, }; -static const struct attribute_group *tty_dev_attr_groups[] = { - &tty_dev_attr_group, - NULL - }; - +static void make_uport_attr_grps(struct uart_port *uport) +{ + uport->attr_grps[0] = &tty_dev_attr_group; + if (uport->dev_spec_attr_group) + uport->attr_grps[1] = uport->dev_spec_attr_group; +} /** * uart_add_one_port - attach a driver-defined port structure @@ -2611,12 +2612,15 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport) uart_configure_port(drv, state, uport); + make_uport_attr_grps(uport); + /* * Register the port whether it's detected or not. This allows * setserial to be used to alter this port's parameters. */ tty_dev = tty_port_register_device_attr(port, drv->tty_driver, - uport->line, uport->dev, port, tty_dev_attr_groups); + uport->line, uport->dev, port, + (const struct attribute_group **)uport->attr_grps); if (likely(!IS_ERR(tty_dev))) { device_set_wakeup_capable(tty_dev, 1); } else { diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index f729be9..7e3122f 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h @@ -113,6 +113,8 @@ struct uart_icount { typedef unsigned int __bitwise__ upf_t; +#define MAX_ATTR_GRPS 3 + struct uart_port { spinlock_t lock; /* port lock */ unsigned long iobase; /* in/out[bwl] */ @@ -195,6 +197,8 @@ struct uart_port { unsigned int line; /* port index */ resource_size_t mapbase; /* for ioremap */ struct device *dev; /* parent device */ + struct attribute_group *dev_spec_attr_group; /* specific attribute */ + struct attribute_group *attr_grps[MAX_ATTR_GRPS];/* all attr. groups */ unsigned char hub6; /* this should be in the 8250 driver */ unsigned char suspended; unsigned char irq_wake; -- 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