Blame view

board/socrates/socrates.c 10.2 KB
5d108ac8f   Sergei Poselenov   Initial support f...
1
2
3
4
5
6
7
8
9
10
  /*
   * (C) Copyright 2008
   * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com.
   *
   * Copyright 2004 Freescale Semiconductor.
   * (C) Copyright 2002,2003, Motorola Inc.
   * Xianghua Xiao, (X.Xiao@motorola.com)
   *
   * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.com>
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
11
   * SPDX-License-Identifier:	GPL-2.0+
5d108ac8f   Sergei Poselenov   Initial support f...
12
13
14
15
16
17
18
19
   */
  
  #include <common.h>
  #include <pci.h>
  #include <asm/processor.h>
  #include <asm/immap_85xx.h>
  #include <ioports.h>
  #include <flash.h>
e18575d5f   Sergei Poselenov   socrates: changes...
20
21
  #include <libfdt.h>
  #include <fdt_support.h>
e1eb0e25d   Andy Fleming   socrates: Fix PCI...
22
  #include <asm/io.h>
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
23
24
25
  #include <i2c.h>
  #include <mb862xx.h>
  #include <video_fb.h>
59abd15b4   Sergei Poselenov   Socrates: Added F...
26
  #include "upm_table.h"
3e79b588b   Detlev Zundel   85xx: Socrates: M...
27

5d108ac8f   Sergei Poselenov   Initial support f...
28
29
30
  DECLARE_GLOBAL_DATA_PTR;
  
  extern flash_info_t flash_info[];	/* FLASH chips info */
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
31
  extern GraphicDevice mb862xx;
5d108ac8f   Sergei Poselenov   Initial support f...
32
33
34
35
36
37
  
  void local_bus_init (void);
  ulong flash_get_size (ulong base, int banknum);
  
  int checkboard (void)
  {
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
38
  	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
f0c0b3a9e   Wolfgang Denk   Fix incorrect use...
39
  	char buf[64];
5e1882df6   Sergei Poselenov   Socrates: Fix PCI...
40
  	int f;
f0c0b3a9e   Wolfgang Denk   Fix incorrect use...
41
42
43
44
  	int i = getenv_f("serial#", buf, sizeof(buf));
  #ifdef CONFIG_PCI
  	char *src;
  #endif
5d108ac8f   Sergei Poselenov   Initial support f...
45
46
  
  	puts("Board: Socrates");
f0c0b3a9e   Wolfgang Denk   Fix incorrect use...
47
  	if (i > 0) {
5d108ac8f   Sergei Poselenov   Initial support f...
48
  		puts(", serial# ");
f0c0b3a9e   Wolfgang Denk   Fix incorrect use...
49
  		puts(buf);
5d108ac8f   Sergei Poselenov   Initial support f...
50
51
52
53
54
  	}
  	putc('
  ');
  
  #ifdef CONFIG_PCI
e1eb0e25d   Andy Fleming   socrates: Fix PCI...
55
56
  	/* Check the PCI_clk sel bit */
  	if (in_be32(&gur->porpllsr) & (1<<15)) {
5e1882df6   Sergei Poselenov   Socrates: Fix PCI...
57
58
59
60
61
62
63
64
  		src = "SYSCLK";
  		f = CONFIG_SYS_CLK_FREQ;
  	} else {
  		src = "PCI_CLK";
  		f = CONFIG_PCI_CLK_FREQ;
  	}
  	printf ("PCI1:  32 bit, %d MHz (%s)
  ",	f/1000000, src);
5d108ac8f   Sergei Poselenov   Initial support f...
65
66
67
68
69
70
71
72
73
  #else
  	printf ("PCI1:  disabled
  ");
  #endif
  
  	/*
  	 * Initialize local bus.
  	 */
  	local_bus_init ();
5d108ac8f   Sergei Poselenov   Initial support f...
74
75
76
77
78
  	return 0;
  }
  
  int misc_init_r (void)
  {
5d108ac8f   Sergei Poselenov   Initial support f...
79
80
81
82
83
84
85
86
87
  	/*
  	 * Adjust flash start and offset to detected values
  	 */
  	gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
  	gd->bd->bi_flashoffset = 0;
  
  	/*
  	 * Check if boot FLASH isn't max size
  	 */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
88
  	if (gd->bd->bi_flashsize < (0 - CONFIG_SYS_FLASH0)) {
f51cdaf19   Becky Bruce   83xx/85xx/86xx: L...
89
90
91
92
  		set_lbc_or(0, gd->bd->bi_flashstart |
  			   (CONFIG_SYS_OR0_PRELIM & 0x00007fff));
  		set_lbc_br(0, gd->bd->bi_flashstart |
  			   (CONFIG_SYS_BR0_PRELIM & 0x00007fff));
5d108ac8f   Sergei Poselenov   Initial support f...
93
94
95
96
  
  		/*
  		 * Re-check to get correct base address
  		 */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
97
  		flash_get_size(gd->bd->bi_flashstart, CONFIG_SYS_MAX_FLASH_BANKS - 1);
5d108ac8f   Sergei Poselenov   Initial support f...
98
99
100
101
102
  	}
  
  	/*
  	 * Check if only one FLASH bank is available
  	 */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
103
  	if (gd->bd->bi_flashsize != CONFIG_SYS_MAX_FLASH_BANKS * (0 - CONFIG_SYS_FLASH0)) {
f51cdaf19   Becky Bruce   83xx/85xx/86xx: L...
104
105
  		set_lbc_or(1, 0);
  		set_lbc_br(1, 0);
5d108ac8f   Sergei Poselenov   Initial support f...
106
107
108
109
110
111
  
  		/*
  		 * Re-do flash protection upon new addresses
  		 */
  		flash_protect (FLAG_PROTECT_CLEAR,
  			       gd->bd->bi_flashstart, 0xffffffff,
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
112
  			       &flash_info[CONFIG_SYS_MAX_FLASH_BANKS - 1]);
5d108ac8f   Sergei Poselenov   Initial support f...
113
114
115
  
  		/* Monitor protection ON by default */
  		flash_protect (FLAG_PROTECT_SET,
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
116
117
  			       CONFIG_SYS_MONITOR_BASE, CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1,
  			       &flash_info[CONFIG_SYS_MAX_FLASH_BANKS - 1]);
5d108ac8f   Sergei Poselenov   Initial support f...
118
119
120
  
  		/* Environment protection ON by default */
  		flash_protect (FLAG_PROTECT_SET,
0e8d15866   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV ma...
121
122
  			       CONFIG_ENV_ADDR,
  			       CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE - 1,
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
123
  			       &flash_info[CONFIG_SYS_MAX_FLASH_BANKS - 1]);
5d108ac8f   Sergei Poselenov   Initial support f...
124
125
126
  
  		/* Redundant environment protection ON by default */
  		flash_protect (FLAG_PROTECT_SET,
0e8d15866   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV ma...
127
  			       CONFIG_ENV_ADDR_REDUND,
dfcd7f216   Wolfgang Denk   Redundant Environ...
128
  			       CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SECT_SIZE - 1,
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
129
  			       &flash_info[CONFIG_SYS_MAX_FLASH_BANKS - 1]);
5d108ac8f   Sergei Poselenov   Initial support f...
130
131
132
133
134
135
136
137
138
139
  	}
  
  	return 0;
  }
  
  /*
   * Initialize Local Bus
   */
  void local_bus_init (void)
  {
f51cdaf19   Becky Bruce   83xx/85xx/86xx: L...
140
  	volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
141
  	volatile ccsr_local_ecm_t *ecm = (void *)(CONFIG_SYS_MPC85xx_ECM_ADDR);
3e79b588b   Detlev Zundel   85xx: Socrates: M...
142
143
144
  	sys_info_t sysinfo;
  	uint clkdiv;
  	uint lbc_mhz;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
145
  	uint lcrr = CONFIG_SYS_LBC_LCRR;
3e79b588b   Detlev Zundel   85xx: Socrates: M...
146
147
  
  	get_sys_info (&sysinfo);
a5d212a26   Trent Piepho   mpc8xxx: LCRR[CLK...
148
  	clkdiv = lbc->lcrr & LCRR_CLKDIV;
997399fa4   Prabhakar Kushwaha   powerpc: Fix Came...
149
  	lbc_mhz = sysinfo.freq_systembus / 1000000 / clkdiv;
3e79b588b   Detlev Zundel   85xx: Socrates: M...
150
151
152
153
154
155
156
157
158
  
  	/* Disable PLL bypass for Local Bus Clock >= 66 MHz */
  	if (lbc_mhz >= 66)
  		lcrr &= ~LCRR_DBYP;	/* DLL Enabled */
  	else
  		lcrr |= LCRR_DBYP;	/* DLL Bypass */
  
  	out_be32 (&lbc->lcrr, lcrr);
  	asm ("sync;isync;msync");
5d108ac8f   Sergei Poselenov   Initial support f...
159

3e79b588b   Detlev Zundel   85xx: Socrates: M...
160
161
162
163
  	out_be32 (&lbc->ltesr, 0xffffffff);	/* Clear LBC error interrupts */
  	out_be32 (&lbc->lteir, 0xffffffff);	/* Enable LBC error interrupts */
  	out_be32 (&ecm->eedr, 0xffffffff);	/* Clear ecm errors */
  	out_be32 (&ecm->eeer, 0xffffffff);	/* Enable ecm errors */
5d108ac8f   Sergei Poselenov   Initial support f...
164

3e79b588b   Detlev Zundel   85xx: Socrates: M...
165
166
167
  	/* Init UPMA for FPGA access */
  	out_be32 (&lbc->mamr, 0x44440); /* Use a customer-supplied value */
  	upmconfig (UPMA, (uint *)UPMTableA, sizeof(UPMTableA)/sizeof(int));
e64987a89   Anatolij Gustschin   85xx: socrates: E...
168

fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
169
170
171
  	/* Init UPMB for Lime controller access */
  	out_be32 (&lbc->mbmr, 0x444440); /* Use a customer-supplied value */
  	upmconfig (UPMB, (uint *)UPMTableB, sizeof(UPMTableB)/sizeof(int));
5d108ac8f   Sergei Poselenov   Initial support f...
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
  }
  
  #if defined(CONFIG_PCI)
  /*
   * Initialize PCI Devices, report devices found.
   */
  
  #ifndef CONFIG_PCI_PNP
  static struct pci_config_table pci_mpc85xxads_config_table[] = {
  	{PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
  	 PCI_IDSEL_NUMBER, PCI_ANY_ID,
  	 pci_cfgfunc_config_device, {PCI_ENET0_IOADDR,
  				     PCI_ENET0_MEMADDR,
  				     PCI_COMMAND_MEMORY |
  				     PCI_COMMAND_MASTER}},
  	{}
  };
  #endif
  
  
  static struct pci_controller hose = {
  #ifndef CONFIG_PCI_PNP
  	config_table:pci_mpc85xxads_config_table,
  #endif
  };
  
  #endif /* CONFIG_PCI */
  
  
  void pci_init_board (void)
  {
  #ifdef CONFIG_PCI
  	pci_mpc85xx_init (&hose);
  #endif /* CONFIG_PCI */
  }
  
  #ifdef CONFIG_BOARD_EARLY_INIT_R
  int board_early_init_r (void)
  {
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
211
  	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
3e79b588b   Detlev Zundel   85xx: Socrates: M...
212
213
214
215
216
217
  
  	/* set and reset the GPIO pin 2 which will reset the W83782G chip */
  	out_8((unsigned char*)&gur->gpoutdr, 0x3F );
  	out_be32((unsigned int*)&gur->gpiocr, 0x200 );	/* enable GPOut */
  	udelay(200);
  	out_8( (unsigned char*)&gur->gpoutdr, 0x1F );
5d108ac8f   Sergei Poselenov   Initial support f...
218
219
220
  	return (0);
  }
  #endif /* CONFIG_BOARD_EARLY_INIT_R */
e18575d5f   Sergei Poselenov   socrates: changes...
221
222
223
224
225
  
  #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
  void
  ft_board_setup(void *blob, bd_t *bd)
  {
3e79b588b   Detlev Zundel   85xx: Socrates: M...
226
227
  	u32 val[12];
  	int rc, i = 0;
e18575d5f   Sergei Poselenov   socrates: changes...
228
229
  
  	ft_cpu_setup(blob, bd);
3e79b588b   Detlev Zundel   85xx: Socrates: M...
230
231
232
233
234
  	/* Fixup NOR FLASH mapping */
  	val[i++] = 0;				/* chip select number */
  	val[i++] = 0;				/* always 0 */
  	val[i++] = gd->bd->bi_flashstart;
  	val[i++] = gd->bd->bi_flashsize;
e18575d5f   Sergei Poselenov   socrates: changes...
235

6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
236
  	if (mb862xx.frameAdrs == CONFIG_SYS_LIME_BASE) {
e64987a89   Anatolij Gustschin   85xx: socrates: E...
237
238
239
  		/* Fixup LIME mapping */
  		val[i++] = 2;			/* chip select number */
  		val[i++] = 0;			/* always 0 */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
240
241
  		val[i++] = CONFIG_SYS_LIME_BASE;
  		val[i++] = CONFIG_SYS_LIME_SIZE;
e64987a89   Anatolij Gustschin   85xx: socrates: E...
242
  	}
3e79b588b   Detlev Zundel   85xx: Socrates: M...
243
244
245
  	/* Fixup FPGA mapping */
  	val[i++] = 3;				/* chip select number */
  	val[i++] = 0;				/* always 0 */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
246
247
  	val[i++] = CONFIG_SYS_FPGA_BASE;
  	val[i++] = CONFIG_SYS_FPGA_SIZE;
a23cddde1   Sergei Poselenov   Socrates: Added F...
248

3e79b588b   Detlev Zundel   85xx: Socrates: M...
249
250
  	rc = fdt_find_and_setprop(blob, "/localbus", "ranges",
  				  val, i * sizeof(u32), 1);
a23cddde1   Sergei Poselenov   Socrates: Added F...
251
  	if (rc)
3e79b588b   Detlev Zundel   85xx: Socrates: M...
252
253
  		printf("Unable to update localbus ranges, err=%s
  ",
a23cddde1   Sergei Poselenov   Socrates: Added F...
254
  		       fdt_strerror(rc));
e18575d5f   Sergei Poselenov   socrates: changes...
255
256
  }
  #endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
e64987a89   Anatolij Gustschin   85xx: socrates: E...
257

e64987a89   Anatolij Gustschin   85xx: socrates: E...
258
259
  #define DEFAULT_BRIGHTNESS	25
  #define BACKLIGHT_ENABLE	(1 << 31)
e64987a89   Anatolij Gustschin   85xx: socrates: E...
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
  static const gdc_regs init_regs [] =
  {
  	{0x0100, 0x00010f00},
  	{0x0020, 0x801901df},
  	{0x0024, 0x00000000},
  	{0x0028, 0x00000000},
  	{0x002c, 0x00000000},
  	{0x0110, 0x00000000},
  	{0x0114, 0x00000000},
  	{0x0118, 0x01df0320},
  	{0x0004, 0x041f0000},
  	{0x0008, 0x031f031f},
  	{0x000c, 0x017f0349},
  	{0x0010, 0x020c0000},
  	{0x0014, 0x01df01e9},
  	{0x0018, 0x00000000},
  	{0x001c, 0x01e00320},
  	{0x0100, 0x80010f00},
  	{0x0, 0x0}
  };
  
  const gdc_regs *board_get_regs (void)
  {
  	return init_regs;
  }
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
285
286
  int lime_probe(void)
  {
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
287
288
  	uint cfg_br2;
  	uint cfg_or2;
c28d3bbe9   Wolfgang Grandegger   video: mb862xx: i...
289
  	int type;
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
290

f51cdaf19   Becky Bruce   83xx/85xx/86xx: L...
291
292
  	cfg_br2 = get_lbc_br(2);
  	cfg_or2 = get_lbc_or(2);
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
293
294
  
  	/* Configure GPCM for CS2 */
f51cdaf19   Becky Bruce   83xx/85xx/86xx: L...
295
296
297
  	set_lbc_br(2, 0);
  	set_lbc_or(2, 0xfc000410);
  	set_lbc_br(2, (CONFIG_SYS_LIME_BASE) | 0x00001901);
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
298

c28d3bbe9   Wolfgang Grandegger   video: mb862xx: i...
299
300
  	/* Get controller type */
  	type = mb862xx_probe(CONFIG_SYS_LIME_BASE);
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
301
302
  
  	/* Restore previous CS2 configuration */
f51cdaf19   Becky Bruce   83xx/85xx/86xx: L...
303
304
305
  	set_lbc_br(2, 0);
  	set_lbc_or(2, cfg_or2);
  	set_lbc_br(2, cfg_br2);
c28d3bbe9   Wolfgang Grandegger   video: mb862xx: i...
306
307
  
  	return (type == MB862XX_TYPE_LIME) ? 1 : 0;
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
308
  }
e64987a89   Anatolij Gustschin   85xx: socrates: E...
309
310
311
  /* Returns Lime base address */
  unsigned int board_video_init (void)
  {
fb661ea44   u-boot@bugs.denx.de   85xx: socrates: a...
312
  	if (!lime_probe())
e64987a89   Anatolij Gustschin   85xx: socrates: E...
313
  		return 0;
c28d3bbe9   Wolfgang Grandegger   video: mb862xx: i...
314
315
  	mb862xx.winSizeX = 800;
  	mb862xx.winSizeY = 480;
e64987a89   Anatolij Gustschin   85xx: socrates: E...
316
317
  	mb862xx.gdfIndex = GDF_15BIT_555RGB;
  	mb862xx.gdfBytesPP = 2;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
318
  	return CONFIG_SYS_LIME_BASE;
e64987a89   Anatolij Gustschin   85xx: socrates: E...
319
320
321
322
323
324
325
326
327
328
329
330
331
  }
  
  #define W83782D_REG_CFG		0x40
  #define W83782D_REG_BANK_SEL	0x4e
  #define W83782D_REG_ADCCLK	0x4b
  #define W83782D_REG_BEEP_CTRL	0x4d
  #define W83782D_REG_BEEP_CTRL2	0x57
  #define W83782D_REG_PWMOUT1	0x5b
  #define W83782D_REG_VBAT	0x5d
  
  static int w83782d_hwmon_init(void)
  {
  	u8 buf;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
332
  	if (i2c_read(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_CFG, 1, &buf, 1))
e64987a89   Anatolij Gustschin   85xx: socrates: E...
333
  		return -1;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
334
335
336
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_CFG, 0x80);
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_BANK_SEL, 0);
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_ADCCLK, 0x40);
e64987a89   Anatolij Gustschin   85xx: socrates: E...
337

6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
338
339
  	buf = i2c_reg_read(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_BEEP_CTRL);
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_BEEP_CTRL,
e64987a89   Anatolij Gustschin   85xx: socrates: E...
340
  		      buf | 0x80);
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
341
342
343
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_BEEP_CTRL2, 0);
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_PWMOUT1, 0x47);
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_VBAT, 0x01);
e64987a89   Anatolij Gustschin   85xx: socrates: E...
344

6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
345
346
  	buf = i2c_reg_read(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_CFG);
  	i2c_reg_write(CONFIG_SYS_I2C_W83782G_ADDR, W83782D_REG_CFG,
e64987a89   Anatolij Gustschin   85xx: socrates: E...
347
348
349
350
351
352
353
354
355
356
357
  		      (buf & 0xf4) | 0x01);
  	return 0;
  }
  
  static void board_backlight_brightness(int br)
  {
  	u32 reg;
  	u8 buf;
  	u8 old_buf;
  
  	/* Select bank 0 */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
358
  	if (i2c_read(CONFIG_SYS_I2C_W83782G_ADDR, 0x4e, 1, &old_buf, 1))
e64987a89   Anatolij Gustschin   85xx: socrates: E...
359
360
361
  		goto err;
  	else
  		buf = old_buf & 0xf8;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
362
  	if (i2c_write(CONFIG_SYS_I2C_W83782G_ADDR, 0x4e, 1, &buf, 1))
e64987a89   Anatolij Gustschin   85xx: socrates: E...
363
364
365
366
367
  		goto err;
  
  	if (br > 0) {
  		/* PWMOUT1 duty cycle ctrl */
  		buf = 255 / (100 / br);
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
368
  		if (i2c_write(CONFIG_SYS_I2C_W83782G_ADDR, 0x5b, 1, &buf, 1))
e64987a89   Anatolij Gustschin   85xx: socrates: E...
369
370
371
  			goto err;
  
  		/* LEDs on */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
372
  		reg = in_be32((void *)(CONFIG_SYS_FPGA_BASE + 0x0c));
e64987a89   Anatolij Gustschin   85xx: socrates: E...
373
  		if (!(reg & BACKLIGHT_ENABLE));
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
374
  			out_be32((void *)(CONFIG_SYS_FPGA_BASE + 0x0c),
e64987a89   Anatolij Gustschin   85xx: socrates: E...
375
376
377
  				 reg | BACKLIGHT_ENABLE);
  	} else {
  		buf = 0;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
378
  		if (i2c_write(CONFIG_SYS_I2C_W83782G_ADDR, 0x5b, 1, &buf, 1))
e64987a89   Anatolij Gustschin   85xx: socrates: E...
379
380
381
  			goto err;
  
  		/* LEDs off */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
382
  		reg = in_be32((void *)(CONFIG_SYS_FPGA_BASE + 0x0c));
e64987a89   Anatolij Gustschin   85xx: socrates: E...
383
  		reg &= ~BACKLIGHT_ENABLE;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
384
  		out_be32((void *)(CONFIG_SYS_FPGA_BASE + 0x0c), reg);
e64987a89   Anatolij Gustschin   85xx: socrates: E...
385
386
  	}
  	/* Restore previous bank setting */
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
387
  	if (i2c_write(CONFIG_SYS_I2C_W83782G_ADDR, 0x4e, 1, &old_buf, 1))
e64987a89   Anatolij Gustschin   85xx: socrates: E...
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
  		goto err;
  
  	return;
  err:
  	printf("W83782G I2C access failed
  ");
  }
  
  void board_backlight_switch (int flag)
  {
  	char * param;
  	int rc;
  
  	if (w83782d_hwmon_init())
  		printf ("hwmon IC init failed
  ");
  
  	if (flag) {
  		param = getenv("brightness");
  		rc = param ? simple_strtol(param, NULL, 10) : -1;
  		if (rc < 0)
  			rc = DEFAULT_BRIGHTNESS;
  	} else {
  		rc = 0;
  	}
  	board_backlight_brightness(rc);
  }
  
  #if defined(CONFIG_CONSOLE_EXTRA_INFO)
  /*
   * Return text to be printed besides the logo.
   */
  void video_get_info_str (int line_number, char *info)
  {
  	if (line_number == 1) {
  		strcpy (info, " Board: Socrates");
  	} else {
  		info [0] = '\0';
  	}
  }
  #endif