eeprom_93cx6
Subsystems (3)
PATCH RESEND 1/4 eeprom_93cx6
This patch adds the eeprom_93cx6 module to the lib folder. This module provides a generic approach for reading and writing words from the eeprom chipsets 93c46 and 93c66.
Signed-off-by Ivo van Doorn <[email protected]>
---
include/linux/eeprom_93cx6.h +77 -0
@@ -0,0 +1,77 @@ +/* +Copyright (C) 2004 - 2006 rt2x00 SourceForge Project +<http://rt2x00.serialmonkey.com> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the +Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +/* +Module: eeprom_93cx6 +Abstract: EEPROM reader datastructures for 93cx6 chipsets. +Supported chipsets: 93c46 & 93c66. +*/ + +/* +* EEPROM operation defines. +*/ +#define PCI_EEPROM_WIDTH_93C46 6 +#define PCI_EEPROM_WIDTH_93C66 8 +#define PCI_EEPROM_WIDTH_OPCODE 3 +#define PCI_EEPROM_WRITE_OPCODE 0x05 +#define PCI_EEPROM_READ_OPCODE 0x06 +#define PCI_EEPROM_EWDS_OPCODE 0x10 +#define PCI_EEPROM_EWEN_OPCODE 0x13 + +/** +* struct eeprom_93cx6 - control structure for setting the commands +* for reading the eeprom data. +* @data: private pointer for the driver. +* @register_read(struct eeprom_93cx6 *eeprom): handler to +* read the eeprom register, this function should set all reg_* fields. +* @register_write(struct eeprom_93cx6 *eeprom): handler to +* write to the eeprom register by using all reg_* fields. +* @width: eeprom width, should be one of the PCI_EEPROM_WIDTH_* defines +* @reg_data_in: register field to indicate data input +* @reg_data_out: register field to indicate data output +* @reg_data_clock: register field to set the data clock +* @reg_chip_select: register field to set the chip select +* +* This structure is used for the communication between the driver +* and the eeprom_93cx6 handlers for reading the eeprom. +*/ +struct eeprom_93cx6 { +void *data; + +void (*register_read)(struct eeprom_93cx6 *eeprom); +void (*register_write)(struct eeprom_93cx6 *eeprom); + +int width; + +char reg_data_in; +char reg_data_out; +char reg_data_clock; +char reg_chip_select; +}; + +extern void eeprom_93cx6_read (struct eeprom_93cx6 *eeprom, +const u8 word,__le16 *data); +extern void eeprom_93cx6_multiread (struct eeprom_93cx6 *eeprom, +const u8 word,__le16 *data,const u16 words); + +extern void eeprom_93cx6_write (struct eeprom_93cx6 *eeprom, +const u8 word,__le16 *data); +extern void eeprom_93cx6_multiwrite (struct eeprom_93cx6 *eeprom, +const u8 word,__le16 *data,const u16 words);
lib/Kconfig +8 -0
@@ -38,6 +38,14 @@ require M here. See Castagnoli93. Module will be libcrc32c. +config EEPROM_93CX6 + tristate "EEPROM 93CX6 support" + ---help--- + This is a driver for the EEPROM chipsets 93c46 and 93c66. + The driver supports both read as well as write commands. + + When compiled as a module, this driver will be called "eeprom_93c6.ko". + config AUDIT_GENERIC bool depends on AUDIT && !AUDIT_ARCH
lib/Makefile +2 -0
@@ -53,6 +53,8 @@ obj-$(CONFIG_SMP) += percpu_counter.o obj-$(CONFIG_AUDIT_GENERIC) += audit.o +obj-$(CONFIG_EEPROM_93CX6) += eeprom_93cx6.o + obj-$(CONFIG_SWIOTLB) += swiotlb.o hostprogs-y := gen_crc32table
lib/eeprom_93cx6.c +343 -0
343 lines not on this page · raw message