diff options
author | Ben Dooks <ben-linux@fluff.org> | 2008-02-04 19:02:20 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2008-02-11 11:06:35 -0500 |
commit | bb44fb70e069412c08e07f494b6b4e985f6331ac (patch) | |
tree | 7ddccf526057a699184d787d1cb135584f12c83f | |
parent | 073d3f46e5ccc49ede1d3487ed1e71d63d71b750 (diff) |
DM9000: Add platform flag for no attached EEPROM
Allow the platform data to specify to the DM9000 driver
that there is no posibility of an attached EEPROM on the
device, so default all reads to 0xff and ignore any
write operations.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r-- | drivers/net/dm9000.c | 15 | ||||
-rw-r--r-- | include/linux/dm9000.h | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index d0cd7f945fde..afd2cf509073 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
@@ -405,6 +405,9 @@ static int dm9000_get_eeprom(struct net_device *dev, | |||
405 | if ((len & 1) != 0 || (offset & 1) != 0) | 405 | if ((len & 1) != 0 || (offset & 1) != 0) |
406 | return -EINVAL; | 406 | return -EINVAL; |
407 | 407 | ||
408 | if (dm->flags & DM9000_PLATF_NO_EEPROM) | ||
409 | return -ENOENT; | ||
410 | |||
408 | ee->magic = DM_EEPROM_MAGIC; | 411 | ee->magic = DM_EEPROM_MAGIC; |
409 | 412 | ||
410 | for (i = 0; i < len; i += 2) | 413 | for (i = 0; i < len; i += 2) |
@@ -426,6 +429,9 @@ static int dm9000_set_eeprom(struct net_device *dev, | |||
426 | if ((len & 1) != 0 || (offset & 1) != 0) | 429 | if ((len & 1) != 0 || (offset & 1) != 0) |
427 | return -EINVAL; | 430 | return -EINVAL; |
428 | 431 | ||
432 | if (dm->flags & DM9000_PLATF_NO_EEPROM) | ||
433 | return -ENOENT; | ||
434 | |||
429 | if (ee->magic != DM_EEPROM_MAGIC) | 435 | if (ee->magic != DM_EEPROM_MAGIC) |
430 | return -EINVAL; | 436 | return -EINVAL; |
431 | 437 | ||
@@ -1100,6 +1106,12 @@ dm9000_read_eeprom(board_info_t *db, int offset, u8 *to) | |||
1100 | { | 1106 | { |
1101 | unsigned long flags; | 1107 | unsigned long flags; |
1102 | 1108 | ||
1109 | if (db->flags & DM9000_PLATF_NO_EEPROM) { | ||
1110 | to[0] = 0xff; | ||
1111 | to[1] = 0xff; | ||
1112 | return; | ||
1113 | } | ||
1114 | |||
1103 | mutex_lock(&db->addr_lock); | 1115 | mutex_lock(&db->addr_lock); |
1104 | 1116 | ||
1105 | spin_lock_irqsave(&db->lock, flags); | 1117 | spin_lock_irqsave(&db->lock, flags); |
@@ -1134,6 +1146,9 @@ dm9000_write_eeprom(board_info_t *db, int offset, u8 *data) | |||
1134 | { | 1146 | { |
1135 | unsigned long flags; | 1147 | unsigned long flags; |
1136 | 1148 | ||
1149 | if (db->flags & DM9000_PLATF_NO_EEPROM) | ||
1150 | return; | ||
1151 | |||
1137 | mutex_lock(&db->addr_lock); | 1152 | mutex_lock(&db->addr_lock); |
1138 | 1153 | ||
1139 | spin_lock_irqsave(&db->lock, flags); | 1154 | spin_lock_irqsave(&db->lock, flags); |
diff --git a/include/linux/dm9000.h b/include/linux/dm9000.h index ea530fd1be74..a3750462f9e3 100644 --- a/include/linux/dm9000.h +++ b/include/linux/dm9000.h | |||
@@ -20,6 +20,7 @@ | |||
20 | #define DM9000_PLATF_16BITONLY (0x0002) | 20 | #define DM9000_PLATF_16BITONLY (0x0002) |
21 | #define DM9000_PLATF_32BITONLY (0x0004) | 21 | #define DM9000_PLATF_32BITONLY (0x0004) |
22 | #define DM9000_PLATF_EXT_PHY (0x0008) | 22 | #define DM9000_PLATF_EXT_PHY (0x0008) |
23 | #define DM9000_PLATF_NO_EEPROM (0x0010) | ||
23 | 24 | ||
24 | /* platfrom data for platfrom device structure's platfrom_data field */ | 25 | /* platfrom data for platfrom device structure's platfrom_data field */ |
25 | 26 | ||