Skip to content

Commit

Permalink
ARM: SAMSUNG: Add a workaround for get_clock() for serial driver
Browse files Browse the repository at this point in the history
Serial drivers call get_clock() very early, before platform bus
has been set up, this requires a special check to let them get
a proper clock. Without this patch, a serial console is broken
on S5PV310 and S5PC210 boards.

Signed-off-by: Marek Szyprowski <[email protected]>
Signed-off-by: Kyungmin Park <[email protected]>
[[email protected]: fix coding-style]
Signed-off-by: Kukjin Kim <[email protected]>
Cc: Ben Dooks <[email protected]>
  • Loading branch information
mszyprow authored and kgene committed Oct 8, 2010
1 parent 4341f9b commit 7cf4b48
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion arch/arm/plat-samsung/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@
#include <plat/clock.h>
#include <plat/cpu.h>

#include <linux/serial_core.h>
#include <plat/regs-serial.h> /* for s3c24xx_uart_devs */

/* clock information */

static LIST_HEAD(clocks);
Expand All @@ -65,6 +68,28 @@ static int clk_null_enable(struct clk *clk, int enable)
return 0;
}

static int dev_is_s3c_uart(struct device *dev)
{
struct platform_device **pdev = s3c24xx_uart_devs;
int i;
for (i = 0; i < ARRAY_SIZE(s3c24xx_uart_devs); i++, pdev++)
if (*pdev && dev == &(*pdev)->dev)
return 1;
return 0;
}

/*
* Serial drivers call get_clock() very early, before platform bus
* has been set up, this requires a special check to let them get
* a proper clock
*/

static int dev_is_platform_device(struct device *dev)
{
return dev->bus == &platform_bus_type ||
(dev->bus == NULL && dev_is_s3c_uart(dev));
}

/* Clock API calls */

struct clk *clk_get(struct device *dev, const char *id)
Expand All @@ -73,7 +98,7 @@ struct clk *clk_get(struct device *dev, const char *id)
struct clk *clk = ERR_PTR(-ENOENT);
int idno;

if (dev == NULL || dev->bus != &platform_bus_type)
if (dev == NULL || !dev_is_platform_device(dev))
idno = -1;
else
idno = to_platform_device(dev)->id;
Expand Down

0 comments on commit 7cf4b48

Please sign in to comment.