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

Staging: olpc_dcon: replace some magic numbers

This patch replace some magic numbers. I believe it makes
the driver more readable.

The magic number 0x26 is the XO system embedded controller
(EC) command 'DCON power enable/disable'.

Number 0x41, and 0x42 are special memory controller settings
register. The 0x41 initialize bit sequence 0x101 means:
enable memory power down function and special SDRAM clock
delay for synchronize SDRAM output and clock signal.

The 0x42 initialize squence 0x101 is wrong. According to
the specification Bit 8 is reserved, thus not in use.
I removed it.

Signed-off-by: Jens Frederich <jfrederich@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Jens Frederich and committed by
Greg Kroah-Hartman
98d4f93c 01f865ba

+26 -15
+7 -6
drivers/staging/olpc_dcon/olpc_dcon.c
··· 90 90 91 91 /* SDRAM setup/hold time */ 92 92 dcon_write(dcon, 0x3a, 0xc040); 93 - dcon_write(dcon, 0x41, 0x0000); 94 - dcon_write(dcon, 0x41, 0x0101); 95 - dcon_write(dcon, 0x42, 0x0101); 93 + dcon_write(dcon, DCON_REG_MEM_OPT_A, 0x0000); /* clear option bits */ 94 + dcon_write(dcon, DCON_REG_MEM_OPT_A, 95 + MEM_DLL_CLOCK_DELAY | MEM_POWER_DOWN); 96 + dcon_write(dcon, DCON_REG_MEM_OPT_B, MEM_SOFT_RESET); 96 97 97 98 /* Colour swizzle, AA, no passthrough, backlight */ 98 99 if (is_init) { ··· 127 126 power_up: 128 127 if (is_powered_down) { 129 128 x = 1; 130 - x = olpc_ec_cmd(0x26, (unsigned char *)&x, 1, NULL, 0); 129 + x = olpc_ec_cmd(EC_DCON_POWER_MODE, (u8 *)&x, 1, NULL, 0); 131 130 if (x) { 132 131 pr_warn("unable to force dcon to power up: %d!\n", x); 133 132 return x; ··· 145 144 pr_err("unable to stabilize dcon's smbus, reasserting power and praying.\n"); 146 145 BUG_ON(olpc_board_at_least(olpc_board(0xc2))); 147 146 x = 0; 148 - olpc_ec_cmd(0x26, (unsigned char *)&x, 1, NULL, 0); 147 + olpc_ec_cmd(EC_DCON_POWER_MODE, (u8 *)&x, 1, NULL, 0); 149 148 msleep(100); 150 149 is_powered_down = 1; 151 150 goto power_up; /* argh, stupid hardware.. */ ··· 209 208 210 209 if (sleep) { 211 210 x = 0; 212 - x = olpc_ec_cmd(0x26, (unsigned char *)&x, 1, NULL, 0); 211 + x = olpc_ec_cmd(EC_DCON_POWER_MODE, (u8 *)&x, 1, NULL, 0); 213 212 if (x) 214 213 pr_warn("unable to force dcon to power down: %d!\n", x); 215 214 else
+18 -9
drivers/staging/olpc_dcon/olpc_dcon.h
··· 22 22 #define MODE_DEBUG (1<<14) 23 23 #define MODE_SELFTEST (1<<15) 24 24 25 - #define DCON_REG_HRES 2 26 - #define DCON_REG_HTOTAL 3 27 - #define DCON_REG_HSYNC_WIDTH 4 28 - #define DCON_REG_VRES 5 29 - #define DCON_REG_VTOTAL 6 30 - #define DCON_REG_VSYNC_WIDTH 7 31 - #define DCON_REG_TIMEOUT 8 32 - #define DCON_REG_SCAN_INT 9 33 - #define DCON_REG_BRIGHT 10 25 + #define DCON_REG_HRES 0x2 26 + #define DCON_REG_HTOTAL 0x3 27 + #define DCON_REG_HSYNC_WIDTH 0x4 28 + #define DCON_REG_VRES 0x5 29 + #define DCON_REG_VTOTAL 0x6 30 + #define DCON_REG_VSYNC_WIDTH 0x7 31 + #define DCON_REG_TIMEOUT 0x8 32 + #define DCON_REG_SCAN_INT 0x9 33 + #define DCON_REG_BRIGHT 0x10 34 + #define DCON_REG_MEM_OPT_A 0x41 35 + #define DCON_REG_MEM_OPT_B 0x42 36 + 37 + /* Load Delay Locked Loop (DLL) settings for clock delay */ 38 + #define MEM_DLL_CLOCK_DELAY (1<<0) 39 + /* Memory controller power down function */ 40 + #define MEM_POWER_DOWN (1<<8) 41 + /* Memory controller software reset */ 42 + #define MEM_SOFT_RESET (1<<0) 34 43 35 44 /* Status values */ 36 45
+1
include/linux/olpc-ec.h
··· 6 6 #define EC_WRITE_SCI_MASK 0x1b 7 7 #define EC_WAKE_UP_WLAN 0x24 8 8 #define EC_WLAN_LEAVE_RESET 0x25 9 + #define EC_DCON_POWER_MODE 0x26 9 10 #define EC_READ_EB_MODE 0x2a 10 11 #define EC_SET_SCI_INHIBIT 0x32 11 12 #define EC_SET_SCI_INHIBIT_RELEASE 0x34