aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2011-01-28 16:23:56 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2011-02-11 05:16:04 -0500
commit052a7f5c496b7d2966edea0f576ec39f41703992 (patch)
treecf861473d9a09e82c667a3a76ea404e40453946a
parente5dedf8d561fb309ba37003546025300678da549 (diff)
VIDEO: cyberpro: make 'reg_b0_lock' always present
Rather than conditionally compiling out reg_b0_lock, always keep it available, and always take it when changing the PLL rates. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--drivers/video/cyber2000fb.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c
index 87d2aafa92fe..eeccdb8f4848 100644
--- a/drivers/video/cyber2000fb.c
+++ b/drivers/video/cyber2000fb.c
@@ -91,11 +91,13 @@ struct cfb_info {
91 u_char ramdac_powerdown; 91 u_char ramdac_powerdown;
92 92
93 u32 pseudo_palette[16]; 93 u32 pseudo_palette[16];
94
95 spinlock_t reg_b0_lock;
96
94#ifdef CONFIG_FB_CYBER2000_DDC 97#ifdef CONFIG_FB_CYBER2000_DDC
95 bool ddc_registered; 98 bool ddc_registered;
96 struct i2c_adapter ddc_adapter; 99 struct i2c_adapter ddc_adapter;
97 struct i2c_algo_bit_data ddc_algo; 100 struct i2c_algo_bit_data ddc_algo;
98 spinlock_t reg_b0_lock;
99#endif 101#endif
100}; 102};
101 103
@@ -503,9 +505,7 @@ static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw)
503 cyber2000_attrw(0x14, 0x00, cfb); 505 cyber2000_attrw(0x14, 0x00, cfb);
504 506
505 /* PLL registers */ 507 /* PLL registers */
506#ifdef CONFIG_FB_CYBER2000_DDC
507 spin_lock(&cfb->reg_b0_lock); 508 spin_lock(&cfb->reg_b0_lock);
508#endif
509 cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb); 509 cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb);
510 cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb); 510 cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb);
511 cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb); 511 cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb);
@@ -513,9 +513,7 @@ static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw)
513 cyber2000_grphw(0x90, 0x01, cfb); 513 cyber2000_grphw(0x90, 0x01, cfb);
514 cyber2000_grphw(0xb9, 0x80, cfb); 514 cyber2000_grphw(0xb9, 0x80, cfb);
515 cyber2000_grphw(0xb9, 0x00, cfb); 515 cyber2000_grphw(0xb9, 0x00, cfb);
516#ifdef CONFIG_FB_CYBER2000_DDC
517 spin_unlock(&cfb->reg_b0_lock); 516 spin_unlock(&cfb->reg_b0_lock);
518#endif
519 517
520 cfb->ramdac_ctrl = hw->ramdac; 518 cfb->ramdac_ctrl = hw->ramdac;
521 cyber2000fb_write_ramdac_ctrl(cfb); 519 cyber2000fb_write_ramdac_ctrl(cfb);
@@ -1233,8 +1231,6 @@ static int cyber2000fb_ddc_getsda(void *data)
1233 1231
1234static int __devinit cyber2000fb_setup_ddc_bus(struct cfb_info *cfb) 1232static int __devinit cyber2000fb_setup_ddc_bus(struct cfb_info *cfb)
1235{ 1233{
1236 spin_lock_init(&cfb->reg_b0_lock);
1237
1238 strlcpy(cfb->ddc_adapter.name, cfb->fb.fix.id, 1234 strlcpy(cfb->ddc_adapter.name, cfb->fb.fix.id,
1239 sizeof(cfb->ddc_adapter.name)); 1235 sizeof(cfb->ddc_adapter.name));
1240 cfb->ddc_adapter.owner = THIS_MODULE; 1236 cfb->ddc_adapter.owner = THIS_MODULE;
@@ -1389,6 +1385,8 @@ static struct cfb_info __devinit *cyberpro_alloc_fb_info(unsigned int id,
1389 cfb->fb.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; 1385 cfb->fb.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
1390 cfb->fb.pseudo_palette = cfb->pseudo_palette; 1386 cfb->fb.pseudo_palette = cfb->pseudo_palette;
1391 1387
1388 spin_lock_init(&cfb->reg_b0_lock);
1389
1392 fb_alloc_cmap(&cfb->fb.cmap, NR_PALETTE, 0); 1390 fb_alloc_cmap(&cfb->fb.cmap, NR_PALETTE, 0);
1393 1391
1394 return cfb; 1392 return cfb;