Commit 7aac482e6290ab7ad21809e0c7327be959a2203e
Committed by
Olof Johansson
1 parent
77d8443449
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
clocksource: samsung_pwm_timer: Make PWM spinlock global
This patch makes the PWM spinlock global and exports it to allow using it in Samsung PWM driver (will be reworked to use proper synchronization in further patches). Signed-off-by: Tomasz Figa <t.figa@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Kukjin Kim <kgene.kim@samsung.com> Signed-off-by: Olof Johansson <olof@lixom.net>
Showing 2 changed files with 15 additions and 11 deletions Side-by-side Diff
drivers/clocksource/samsung_pwm_timer.c
... | ... | @@ -49,6 +49,9 @@ |
49 | 49 | #define TCON_INVERT(chan) (1 << (4 * (chan) + 2)) |
50 | 50 | #define TCON_AUTORELOAD(chan) (1 << (4 * (chan) + 3)) |
51 | 51 | |
52 | +DEFINE_SPINLOCK(samsung_pwm_lock); | |
53 | +EXPORT_SYMBOL(samsung_pwm_lock); | |
54 | + | |
52 | 55 | struct samsung_timer_source { |
53 | 56 | unsigned int event_id; |
54 | 57 | unsigned int source_id; |
55 | 58 | |
... | ... | @@ -72,14 +75,14 @@ |
72 | 75 | if (channel >= 2) |
73 | 76 | shift = TCFG0_PRESCALER1_SHIFT; |
74 | 77 | |
75 | - spin_lock_irqsave(&pwm->slock, flags); | |
78 | + spin_lock_irqsave(&samsung_pwm_lock, flags); | |
76 | 79 | |
77 | 80 | reg = readl(pwm->base + REG_TCFG0); |
78 | 81 | reg &= ~(TCFG0_PRESCALER_MASK << shift); |
79 | 82 | reg |= (prescale - 1) << shift; |
80 | 83 | writel(reg, pwm->base + REG_TCFG0); |
81 | 84 | |
82 | - spin_unlock_irqrestore(&pwm->slock, flags); | |
85 | + spin_unlock_irqrestore(&samsung_pwm_lock, flags); | |
83 | 86 | } |
84 | 87 | |
85 | 88 | static void samsung_timer_set_divisor(struct samsung_pwm *pwm, |
86 | 89 | |
... | ... | @@ -92,14 +95,14 @@ |
92 | 95 | |
93 | 96 | bits = (fls(divisor) - 1) - pwm->variant.div_base; |
94 | 97 | |
95 | - spin_lock_irqsave(&pwm->slock, flags); | |
98 | + spin_lock_irqsave(&samsung_pwm_lock, flags); | |
96 | 99 | |
97 | 100 | reg = readl(pwm->base + REG_TCFG1); |
98 | 101 | reg &= ~(TCFG1_MUX_MASK << shift); |
99 | 102 | reg |= bits << shift; |
100 | 103 | writel(reg, pwm->base + REG_TCFG1); |
101 | 104 | |
102 | - spin_unlock_irqrestore(&pwm->slock, flags); | |
105 | + spin_unlock_irqrestore(&samsung_pwm_lock, flags); | |
103 | 106 | } |
104 | 107 | |
105 | 108 | static void samsung_time_stop(unsigned int channel) |
106 | 109 | |
... | ... | @@ -110,13 +113,13 @@ |
110 | 113 | if (channel > 0) |
111 | 114 | ++channel; |
112 | 115 | |
113 | - spin_lock_irqsave(&pwm->slock, flags); | |
116 | + spin_lock_irqsave(&samsung_pwm_lock, flags); | |
114 | 117 | |
115 | 118 | tcon = __raw_readl(pwm->base + REG_TCON); |
116 | 119 | tcon &= ~TCON_START(channel); |
117 | 120 | __raw_writel(tcon, pwm->base + REG_TCON); |
118 | 121 | |
119 | - spin_unlock_irqrestore(&pwm->slock, flags); | |
122 | + spin_unlock_irqrestore(&samsung_pwm_lock, flags); | |
120 | 123 | } |
121 | 124 | |
122 | 125 | static void samsung_time_setup(unsigned int channel, unsigned long tcnt) |
... | ... | @@ -128,7 +131,7 @@ |
128 | 131 | if (tcon_chan > 0) |
129 | 132 | ++tcon_chan; |
130 | 133 | |
131 | - spin_lock_irqsave(&pwm->slock, flags); | |
134 | + spin_lock_irqsave(&samsung_pwm_lock, flags); | |
132 | 135 | |
133 | 136 | tcon = __raw_readl(pwm->base + REG_TCON); |
134 | 137 | |
... | ... | @@ -141,7 +144,7 @@ |
141 | 144 | __raw_writel(tcnt, pwm->base + REG_TCMPB(channel)); |
142 | 145 | __raw_writel(tcon, pwm->base + REG_TCON); |
143 | 146 | |
144 | - spin_unlock_irqrestore(&pwm->slock, flags); | |
147 | + spin_unlock_irqrestore(&samsung_pwm_lock, flags); | |
145 | 148 | } |
146 | 149 | |
147 | 150 | static void samsung_time_start(unsigned int channel, bool periodic) |
... | ... | @@ -152,7 +155,7 @@ |
152 | 155 | if (channel > 0) |
153 | 156 | ++channel; |
154 | 157 | |
155 | - spin_lock_irqsave(&pwm->slock, flags); | |
158 | + spin_lock_irqsave(&samsung_pwm_lock, flags); | |
156 | 159 | |
157 | 160 | tcon = __raw_readl(pwm->base + REG_TCON); |
158 | 161 | |
... | ... | @@ -166,7 +169,7 @@ |
166 | 169 | |
167 | 170 | __raw_writel(tcon, pwm->base + REG_TCON); |
168 | 171 | |
169 | - spin_unlock_irqrestore(&pwm->slock, flags); | |
172 | + spin_unlock_irqrestore(&samsung_pwm_lock, flags); | |
170 | 173 | } |
171 | 174 | |
172 | 175 | static int samsung_set_next_event(unsigned long cycles, |
... | ... | @@ -394,7 +397,6 @@ |
394 | 397 | return; |
395 | 398 | } |
396 | 399 | memcpy(&pwm->variant, variant, sizeof(pwm->variant)); |
397 | - spin_lock_init(&pwm->slock); | |
398 | 400 | for (i = 0; i < SAMSUNG_PWM_NUM; ++i) |
399 | 401 | pwm->irq[i] = irq_of_parse_and_map(np, i); |
400 | 402 |