Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: Make Integrator/Versatile/Reaview VCO code similar

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

+26 -32
+4 -12
arch/arm/mach-integrator/impd1.c
··· 55 55 static void impd1_setvco(struct clk *clk, struct icst_vco vco) 56 56 { 57 57 struct impd1_module *impd1 = clk->data; 58 - int vconr = clk - impd1->vcos; 59 - u32 val; 60 - 61 - val = vco.v | (vco.r << 9) | (vco.s << 16); 58 + u32 val = vco.v | (vco.r << 9) | (vco.s << 16); 62 59 63 60 writel(0xa05f, impd1->base + IMPD1_LOCK); 64 - switch (vconr) { 65 - case 0: 66 - writel(val, impd1->base + IMPD1_OSC1); 67 - break; 68 - case 1: 69 - writel(val, impd1->base + IMPD1_OSC2); 70 - break; 71 - } 61 + writel(val, clk->vcoreg); 72 62 writel(0, impd1->base + IMPD1_LOCK); 73 63 74 64 #ifdef DEBUG ··· 371 381 impd1->vcos[i].data = impd1, 372 382 impd1->vcos[i].setvco = impd1_setvco; 373 383 } 384 + impd1->vcos[0].vcoreg = impd1->base + IMPD1_OSC1; 385 + impd1->vcos[1].vcoreg = impd1->base + IMPD1_OSC2; 374 386 375 387 impd1->clks[0] = clkdev_alloc(&impd1->vcos[0], NULL, "lm%x:01000", 376 388 dev->id);
+2 -1
arch/arm/mach-integrator/include/mach/clkdev.h
··· 8 8 unsigned long rate; 9 9 struct module *owner; 10 10 const struct icst_params *params; 11 - void *data; 11 + void __iomem *vcoreg; 12 12 void (*setvco)(struct clk *, struct icst_vco vco); 13 + void *data; 13 14 }; 14 15 15 16 static inline int __clk_get(struct clk *clk)
+5 -4
arch/arm/mach-integrator/integrator_cp.c
··· 266 266 /* 267 267 * Clock handling 268 268 */ 269 - #define CM_LOCK IO_ADDRESS(INTEGRATOR_HDR_LOCK) 270 - #define CM_AUXOSC IO_ADDRESS(INTEGRATOR_HDR_BASE + 0x1c) 269 + #define CM_LOCK (__io_address(INTEGRATOR_HDR_BASE)+INTEGRATOR_HDR_LOCK_OFFSET) 270 + #define CM_AUXOSC (__io_address(INTEGRATOR_HDR_BASE)+0x1c) 271 271 272 272 static const struct icst_params cp_auxvco_params = { 273 273 .ref = 24000000, ··· 285 285 { 286 286 u32 val; 287 287 288 - val = readl(CM_AUXOSC) & ~0x7ffff; 288 + val = readl(clk->vcoreg) & ~0x7ffff; 289 289 val |= vco.v | (vco.r << 9) | (vco.s << 16); 290 290 291 291 writel(0xa05f, CM_LOCK); 292 - writel(val, CM_AUXOSC); 292 + writel(val, clk->vcoreg); 293 293 writel(0, CM_LOCK); 294 294 } 295 295 296 296 static struct clk cp_auxclk = { 297 297 .params = &cp_auxvco_params, 298 + .vcoreg = CM_AUXOSC, 298 299 .setvco = cp_auxvco_set, 299 300 }; 300 301
+8 -8
arch/arm/mach-realview/core.c
··· 271 271 static void realview_oscvco_set(struct clk *clk, struct icst_vco vco) 272 272 { 273 273 void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET; 274 - void __iomem *sys_osc; 275 274 u32 val; 276 275 277 - if (machine_is_realview_pb1176()) 278 - sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC0_OFFSET; 279 - else 280 - sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET; 281 - 282 - val = readl(sys_osc) & ~0x7ffff; 276 + val = readl(clk->vcoreg) & ~0x7ffff; 283 277 val |= vco.v | (vco.r << 9) | (vco.s << 16); 284 278 285 279 writel(0xa05f, sys_lock); 286 - writel(val, sys_osc); 280 + writel(val, clk->vcoreg); 287 281 writel(0, sys_lock); 288 282 } 289 283 ··· 326 332 327 333 static int __init clk_init(void) 328 334 { 335 + if (machine_is_realview_pb1176()) 336 + oscvco_clk.vcoreg = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC0_OFFSET; 337 + else 338 + oscvco_clk.vcoreg = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET; 339 + 329 340 clkdev_add_table(lookups, ARRAY_SIZE(lookups)); 341 + 330 342 return 0; 331 343 } 332 344 arch_initcall(clk_init);
+1 -1
arch/arm/mach-realview/include/mach/clkdev.h
··· 6 6 struct clk { 7 7 unsigned long rate; 8 8 const struct icst_params *params; 9 - u32 oscoff; 9 + void __iomem *vcoreg; 10 10 void (*setvco)(struct clk *, struct icst_vco vco); 11 11 }; 12 12
+5 -5
arch/arm/mach-versatile/core.c
··· 370 370 371 371 static void versatile_oscvco_set(struct clk *clk, struct icst_vco vco) 372 372 { 373 - void __iomem *sys = __io_address(VERSATILE_SYS_BASE); 374 - void __iomem *sys_lock = sys + VERSATILE_SYS_LOCK_OFFSET; 373 + void __iomem *sys_lock = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_LOCK_OFFSET; 375 374 u32 val; 376 375 377 - val = readl(sys + clk->oscoff) & ~0x7ffff; 376 + val = readl(clk->vcoreg) & ~0x7ffff; 378 377 val |= vco.v | (vco.r << 9) | (vco.s << 16); 379 378 380 379 writel(0xa05f, sys_lock); 381 - writel(val, sys + clk->oscoff); 380 + writel(val, clk->vcoreg); 382 381 writel(0, sys_lock); 383 382 } 384 383 385 384 static struct clk osc4_clk = { 386 385 .params = &versatile_oscvco_params, 387 - .oscoff = VERSATILE_SYS_OSCCLCD_OFFSET, 388 386 .setvco = versatile_oscvco_set, 389 387 }; 390 388 ··· 828 830 void __init versatile_init(void) 829 831 { 830 832 int i; 833 + 834 + osc4_clk.vcoreg = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSCCLCD_OFFSET; 831 835 832 836 clkdev_add_table(lookups, ARRAY_SIZE(lookups)); 833 837
+1 -1
arch/arm/mach-versatile/include/mach/clkdev.h
··· 6 6 struct clk { 7 7 unsigned long rate; 8 8 const struct icst_params *params; 9 - u32 oscoff; 9 + void __iomem *vcoreg; 10 10 void (*setvco)(struct clk *, struct icst_vco vco); 11 11 }; 12 12