summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Dooks <ben-linux@fluff.org>2008-07-03 11:24:23 +0100
committerBen Dooks <ben-linux@fluff.org>2008-07-03 16:51:18 +0100
commitea304e394f78af6bafee07e0ed916af9c38abf48 (patch)
treee8ecc7ba1638e1d1a67446ee65bbf0dd6eef1bbe
parent9cf345e3991623d4b7e4df2624b898d7f20ec37f (diff)
downloadkernel-crypto-ea304e394f78af6bafee07e0ed916af9c38abf48.tar.gz
kernel-crypto-ea304e394f78af6bafee07e0ed916af9c38abf48.tar.xz
kernel-crypto-ea304e394f78af6bafee07e0ed916af9c38abf48.zip
[ARM] S3C2410: Add sysfs attribute for serial driver clock source
Add attribute to show the current clock source for the serial driver and remove old and annoying debug output. Note, this only currently shows the current source with a "* " prefix to indicate that it is the current source. Future code will list all the clock sources, with the non-selected one with " " prefix. Signed-off-by: Ben Dooks <ben-linux@fluff.org> PATCH FOLLOWS KernelVersion: 2.6.26-rc3
-rw-r--r--drivers/serial/s3c2410.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c
index e284af8071d..b87c0b55aa2 100644
--- a/drivers/serial/s3c2410.c
+++ b/drivers/serial/s3c2410.c
@@ -685,11 +685,6 @@ static unsigned int s3c24xx_serial_getclk(struct uart_port *port,
int calc_deviation;
for (sptr = res; sptr < resptr; sptr++) {
- printk(KERN_DEBUG
- "found clk %p (%s) quot %d, calc %d\n",
- sptr->clksrc, sptr->clksrc->name,
- sptr->quot, sptr->calc);
-
calc_deviation = baud - sptr->calc;
if (calc_deviation < 0)
calc_deviation = -calc_deviation;
@@ -699,13 +694,8 @@ static unsigned int s3c24xx_serial_getclk(struct uart_port *port,
deviation = calc_deviation;
}
}
-
- printk(KERN_DEBUG "best %p (deviation %d)\n", best, deviation);
}
- printk(KERN_DEBUG "selected clock %p (%s) quot %d, calc %d\n",
- best->clksrc, best->clksrc->name, best->quot, best->calc);
-
/* store results to pass back */
*clksrc = best->clksrc;
@@ -1058,6 +1048,18 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
return 0;
}
+static ssize_t s3c24xx_serial_show_clksrc(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct uart_port *port = s3c24xx_dev_to_port(dev);
+ struct s3c24xx_uart_port *ourport = to_ourport(port);
+
+ return snprintf(buf, PAGE_SIZE, "* %s\n", ourport->clksrc->name);
+}
+
+static DEVICE_ATTR(clock_source, S_IRUGO, s3c24xx_serial_show_clksrc, NULL);
+
/* Device driver serial port probe */
static int probe_index = 0;
@@ -1083,6 +1085,11 @@ static int s3c24xx_serial_probe(struct platform_device *dev,
uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
platform_set_drvdata(dev, &ourport->port);
+ ret = device_create_file(&dev->dev, &dev_attr_clock_source);
+ if (ret < 0) {
+ printk(KERN_ERR "%s: failed to add clksrc attr.\n", __func__);
+ }
+
return 0;
probe_err:
@@ -1093,8 +1100,10 @@ static int s3c24xx_serial_remove(struct platform_device *dev)
{
struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
- if (port)
+ if (port) {
+ device_remove_file(&dev->dev, &dev_attr_clock_source);
uart_remove_one_port(&s3c24xx_uart_drv, port);
+ }
return 0;
}