Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 374221
b: refs/heads/master
c: 7aac482
h: refs/heads/master
i:
  374219: 316ffb8
v: v3
  • Loading branch information
Tomasz Figa authored and Olof Johansson committed Apr 28, 2013
1 parent 7ae09d5 commit 3b85ac8
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 77d844344952934baf2902cf6f1ac870dc1b4d7a
refs/heads/master: 7aac482e6290ab7ad21809e0c7327be959a2203e
24 changes: 13 additions & 11 deletions trunk/drivers/clocksource/samsung_pwm_timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@
#define TCON_INVERT(chan) (1 << (4 * (chan) + 2))
#define TCON_AUTORELOAD(chan) (1 << (4 * (chan) + 3))

DEFINE_SPINLOCK(samsung_pwm_lock);
EXPORT_SYMBOL(samsung_pwm_lock);

struct samsung_timer_source {
unsigned int event_id;
unsigned int source_id;
Expand All @@ -72,14 +75,14 @@ static void samsung_timer_set_prescale(struct samsung_pwm *pwm,
if (channel >= 2)
shift = TCFG0_PRESCALER1_SHIFT;

spin_lock_irqsave(&pwm->slock, flags);
spin_lock_irqsave(&samsung_pwm_lock, flags);

reg = readl(pwm->base + REG_TCFG0);
reg &= ~(TCFG0_PRESCALER_MASK << shift);
reg |= (prescale - 1) << shift;
writel(reg, pwm->base + REG_TCFG0);

spin_unlock_irqrestore(&pwm->slock, flags);
spin_unlock_irqrestore(&samsung_pwm_lock, flags);
}

static void samsung_timer_set_divisor(struct samsung_pwm *pwm,
Expand All @@ -92,14 +95,14 @@ static void samsung_timer_set_divisor(struct samsung_pwm *pwm,

bits = (fls(divisor) - 1) - pwm->variant.div_base;

spin_lock_irqsave(&pwm->slock, flags);
spin_lock_irqsave(&samsung_pwm_lock, flags);

reg = readl(pwm->base + REG_TCFG1);
reg &= ~(TCFG1_MUX_MASK << shift);
reg |= bits << shift;
writel(reg, pwm->base + REG_TCFG1);

spin_unlock_irqrestore(&pwm->slock, flags);
spin_unlock_irqrestore(&samsung_pwm_lock, flags);
}

static void samsung_time_stop(unsigned int channel)
Expand All @@ -110,13 +113,13 @@ static void samsung_time_stop(unsigned int channel)
if (channel > 0)
++channel;

spin_lock_irqsave(&pwm->slock, flags);
spin_lock_irqsave(&samsung_pwm_lock, flags);

tcon = __raw_readl(pwm->base + REG_TCON);
tcon &= ~TCON_START(channel);
__raw_writel(tcon, pwm->base + REG_TCON);

spin_unlock_irqrestore(&pwm->slock, flags);
spin_unlock_irqrestore(&samsung_pwm_lock, flags);
}

static void samsung_time_setup(unsigned int channel, unsigned long tcnt)
Expand All @@ -128,7 +131,7 @@ static void samsung_time_setup(unsigned int channel, unsigned long tcnt)
if (tcon_chan > 0)
++tcon_chan;

spin_lock_irqsave(&pwm->slock, flags);
spin_lock_irqsave(&samsung_pwm_lock, flags);

tcon = __raw_readl(pwm->base + REG_TCON);

Expand All @@ -141,7 +144,7 @@ static void samsung_time_setup(unsigned int channel, unsigned long tcnt)
__raw_writel(tcnt, pwm->base + REG_TCMPB(channel));
__raw_writel(tcon, pwm->base + REG_TCON);

spin_unlock_irqrestore(&pwm->slock, flags);
spin_unlock_irqrestore(&samsung_pwm_lock, flags);
}

static void samsung_time_start(unsigned int channel, bool periodic)
Expand All @@ -152,7 +155,7 @@ static void samsung_time_start(unsigned int channel, bool periodic)
if (channel > 0)
++channel;

spin_lock_irqsave(&pwm->slock, flags);
spin_lock_irqsave(&samsung_pwm_lock, flags);

tcon = __raw_readl(pwm->base + REG_TCON);

Expand All @@ -166,7 +169,7 @@ static void samsung_time_start(unsigned int channel, bool periodic)

__raw_writel(tcon, pwm->base + REG_TCON);

spin_unlock_irqrestore(&pwm->slock, flags);
spin_unlock_irqrestore(&samsung_pwm_lock, flags);
}

static int samsung_set_next_event(unsigned long cycles,
Expand Down Expand Up @@ -394,7 +397,6 @@ static void __init samsung_pwm_alloc(struct device_node *np,
return;
}
memcpy(&pwm->variant, variant, sizeof(pwm->variant));
spin_lock_init(&pwm->slock);
for (i = 0; i < SAMSUNG_PWM_NUM; ++i)
pwm->irq[i] = irq_of_parse_and_map(np, i);

Expand Down
2 changes: 2 additions & 0 deletions trunk/include/clocksource/samsung_pwm.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
struct platform_device;
struct device_node;

extern spinlock_t samsung_pwm_lock;

struct samsung_pwm_variant {
u8 bits;
u8 div_base;
Expand Down

0 comments on commit 3b85ac8

Please sign in to comment.