aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/lasat/lasat_board.c
diff options
context:
space:
mode:
authorThomas Horsten <thomas@horsten.com>2008-06-14 21:17:11 -0400
committerRalf Baechle <ralf@linux-mips.org>2008-06-16 10:14:48 -0400
commit1f34f2e4262bae8a1aa6d8fd6306b07074d33718 (patch)
treee1162a346238af0444846ea4cded8d0a4cb04322 /arch/mips/lasat/lasat_board.c
parentc9c5023d83df5dc7d58830a63fd0e082120f00e3 (diff)
[MIPS] Lasat: sysctl fixup
LASAT's sysctl interface was broken, it failed a check during boot because a single entry had a sysctl number and the rest were unnumbered. When I fixed it I noticed that the whole sysctl file needed a spring clean, it was using mutexes where it wasn't needed (it's only needed to protect during writes to the EEPROM), so I moved that stuff out and generally cleaned the whole thing up. So now, LASAT's sysctl/proc interface is working again. Signed-off-by: Thomas Horsten <thomas@horsten.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/lasat/lasat_board.c')
-rw-r--r--arch/mips/lasat/lasat_board.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/mips/lasat/lasat_board.c b/arch/mips/lasat/lasat_board.c
index ec2f658c3709..31e328b3814d 100644
--- a/arch/mips/lasat/lasat_board.c
+++ b/arch/mips/lasat/lasat_board.c
@@ -23,18 +23,19 @@
23#include <linux/kernel.h> 23#include <linux/kernel.h>
24#include <linux/string.h> 24#include <linux/string.h>
25#include <linux/ctype.h> 25#include <linux/ctype.h>
26#include <linux/mutex.h>
26#include <asm/bootinfo.h> 27#include <asm/bootinfo.h>
27#include <asm/addrspace.h> 28#include <asm/addrspace.h>
28#include "at93c.h" 29#include "at93c.h"
29/* New model description table */ 30/* New model description table */
30#include "lasat_models.h" 31#include "lasat_models.h"
31 32
33static DEFINE_MUTEX(lasat_eeprom_mutex);
34
32#define EEPROM_CRC(data, len) (~crc32(~0, data, len)) 35#define EEPROM_CRC(data, len) (~crc32(~0, data, len))
33 36
34struct lasat_info lasat_board_info; 37struct lasat_info lasat_board_info;
35 38
36void update_bcastaddr(void);
37
38int EEPROMRead(unsigned int pos, unsigned char *data, int len) 39int EEPROMRead(unsigned int pos, unsigned char *data, int len)
39{ 40{
40 int i; 41 int i;
@@ -258,10 +259,6 @@ int lasat_init_board_info(void)
258 sprintf(lasat_board_info.li_typestr, "%d", 10 * c); 259 sprintf(lasat_board_info.li_typestr, "%d", 10 * c);
259 } 260 }
260 261
261#if defined(CONFIG_INET) && defined(CONFIG_SYSCTL)
262 update_bcastaddr();
263#endif
264
265 return 0; 262 return 0;
266} 263}
267 264
@@ -269,6 +266,8 @@ void lasat_write_eeprom_info(void)
269{ 266{
270 unsigned long crc; 267 unsigned long crc;
271 268
269 mutex_lock(&lasat_eeprom_mutex);
270
272 /* Generate the CRC */ 271 /* Generate the CRC */
273 crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info), 272 crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info),
274 sizeof(struct lasat_eeprom_struct) - 4); 273 sizeof(struct lasat_eeprom_struct) - 4);
@@ -277,4 +276,6 @@ void lasat_write_eeprom_info(void)
277 /* Write the EEPROM info */ 276 /* Write the EEPROM info */
278 EEPROMWrite(0, (unsigned char *)&lasat_board_info.li_eeprom_info, 277 EEPROMWrite(0, (unsigned char *)&lasat_board_info.li_eeprom_info,
279 sizeof(struct lasat_eeprom_struct)); 278 sizeof(struct lasat_eeprom_struct));
279
280 mutex_unlock(&lasat_eeprom_mutex);
280} 281}