Skip to content

Commit

Permalink
video: s3c-fb: add spinlock to interrupt routine
Browse files Browse the repository at this point in the history
The spinlock is added to interrupt routine to ensure that the driver
is protected against multiple accesses.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Jingoo Han authored and Paul Mundt committed Apr 11, 2011
1 parent 0d60b28 commit b07f3bb
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/video/s3c-fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ struct s3c_fb_vsync {

/**
* struct s3c_fb - overall hardware state of the hardware
* @slock: The spinlock protection for this data sturcture.
* @dev: The device that we bound to, for printing, etc.
* @regs_res: The resource we claimed for the IO registers.
* @bus_clk: The clk (hclk) feeding our interface and possibly pixclk.
Expand All @@ -195,6 +196,7 @@ struct s3c_fb_vsync {
* @vsync_info: VSYNC-related information (count, queues...)
*/
struct s3c_fb {
spinlock_t slock;
struct device *dev;
struct resource *regs_res;
struct clk *bus_clk;
Expand Down Expand Up @@ -947,6 +949,8 @@ static irqreturn_t s3c_fb_irq(int irq, void *dev_id)
void __iomem *regs = sfb->regs;
u32 irq_sts_reg;

spin_lock(&sfb->slock);

irq_sts_reg = readl(regs + VIDINTCON1);

if (irq_sts_reg & VIDINTCON1_INT_FRAME) {
Expand All @@ -963,6 +967,7 @@ static irqreturn_t s3c_fb_irq(int irq, void *dev_id)
*/
s3c_fb_disable_irq(sfb);

spin_unlock(&sfb->slock);
return IRQ_HANDLED;
}

Expand Down Expand Up @@ -1339,6 +1344,8 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
sfb->pdata = pd;
sfb->variant = fbdrv->variant;

spin_lock_init(&sfb->slock);

sfb->bus_clk = clk_get(dev, "lcd");
if (IS_ERR(sfb->bus_clk)) {
dev_err(dev, "failed to get bus clock\n");
Expand Down

0 comments on commit b07f3bb

Please sign in to comment.