Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 48888cc6 authored by Adrian Bunk's avatar Adrian Bunk Committed by John W. Linville
Browse files

[PATCH] kill include/linux/eeprom.h



This patch kills include/linux/eeprom.h .

Rationale:
- it was only used by one single driver
- even this driver didn't do anything useful with it
- most of this file are non-inline and non-static functions (sic)

This removes include/linux/eeprom.h and cleans drivers/net/ns83820.c up.

If you think eeprom.h should be used more extensively, please consider:
- the code has to be moved from the header file to a .c file
- the currently empty write function has to be implemented
- ns83820.c or any other driver should actually use it

Noone did any of these during the more than 3 years eeprom.h already
exists...

Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 8e3babcd
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -110,7 +110,6 @@
#include <linux/init.h>
#include <linux/ip.h>	/* for iph */
#include <linux/in.h>	/* for IPPROTO_... */
#include <linux/eeprom.h>
#include <linux/compiler.h>
#include <linux/prefetch.h>
#include <linux/ethtool.h>
@@ -445,7 +444,6 @@ struct ns83820 {

	u32			MEAR_cache;
	u32			IMR_cache;
	struct eeprom		ee;

	unsigned		linkstate;

@@ -1558,15 +1556,13 @@ static void ns83820_getmac(struct ns83820 *dev, u8 *mac)
	unsigned i;
	for (i=0; i<3; i++) {
		u32 data;
#if 0	/* I've left this in as an example of how to use eeprom.h */
		data = eeprom_readw(&dev->ee, 0xa + 2 - i);
#else

		/* Read from the perfect match memory: this is loaded by
		 * the chip from the EEPROM via the EELOAD self test.
		 */
		writel(i*2, dev->base + RFCR);
		data = readl(dev->base + RFDR);
#endif

		*mac++ = data;
		*mac++ = data >> 8;
	}
@@ -1851,8 +1847,6 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_
	spin_lock_init(&dev->misc_lock);
	dev->pci_dev = pci_dev;

	dev->ee.cache = &dev->MEAR_cache;
	dev->ee.lock = &dev->misc_lock;
	SET_MODULE_OWNER(ndev);
	SET_NETDEV_DEV(ndev, &pci_dev->dev);

@@ -1887,9 +1881,6 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_

	dev->IMR_cache = 0;

	setup_ee_mem_bitbanger(&dev->ee, dev->base + MEAR, 3, 2, 1, 0,
		0);

	err = request_irq(pci_dev->irq, ns83820_irq, SA_SHIRQ,
			  DRV_NAME, ndev);
	if (err) {

include/linux/eeprom.h

deleted100644 → 0
+0 −136
Original line number Diff line number Diff line
/* credit winbond-840.c
 */
#include <asm/io.h>
struct eeprom_ops {
	void	(*set_cs)(void *ee);
	void	(*clear_cs)(void *ee);
};

#define EEPOL_EEDI	0x01
#define EEPOL_EEDO	0x02
#define EEPOL_EECLK	0x04
#define EEPOL_EESEL	0x08

struct eeprom {
	void *dev;
	struct eeprom_ops *ops;

	void __iomem *	addr;

	unsigned	ee_addr_bits;

	unsigned	eesel;
	unsigned	eeclk;
	unsigned	eedo;
	unsigned	eedi;
	unsigned	polarity;
	unsigned	ee_state;

	spinlock_t	*lock;
	u32		*cache;
};


u8   eeprom_readb(struct eeprom *ee, unsigned address);
void eeprom_read(struct eeprom *ee, unsigned address, u8 *bytes,
		unsigned count);
void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data);
void eeprom_write(struct eeprom *ee, unsigned address, u8 *bytes,
		unsigned count);

/* The EEPROM commands include the alway-set leading bit. */
enum EEPROM_Cmds {
        EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6),
};

void setup_ee_mem_bitbanger(struct eeprom *ee, void __iomem *memaddr, int eesel_bit, int eeclk_bit, int eedo_bit, int eedi_bit, unsigned polarity)
{
	ee->addr = memaddr;
	ee->eesel = 1 << eesel_bit;
	ee->eeclk = 1 << eeclk_bit;
	ee->eedo = 1 << eedo_bit;
	ee->eedi = 1 << eedi_bit;

	ee->polarity = polarity;

	*ee->cache = readl(ee->addr);
}

/* foo. put this in a .c file */
static inline void eeprom_update(struct eeprom *ee, u32 mask, int pol)
{
	unsigned long flags;
	u32 data;

	spin_lock_irqsave(ee->lock, flags);
	data = *ee->cache;

	data &= ~mask;
	if (pol)
		data |= mask;

	*ee->cache = data;
//printk("update: %08x\n", data);
	writel(data, ee->addr);
	spin_unlock_irqrestore(ee->lock, flags);
}

void eeprom_clk_lo(struct eeprom *ee)
{
	int pol = !!(ee->polarity & EEPOL_EECLK);

	eeprom_update(ee, ee->eeclk, pol);
	udelay(2);
}

void eeprom_clk_hi(struct eeprom *ee)
{
	int pol = !!(ee->polarity & EEPOL_EECLK);

	eeprom_update(ee, ee->eeclk, !pol);
	udelay(2);
}

void eeprom_send_addr(struct eeprom *ee, unsigned address)
{
	int pol = !!(ee->polarity & EEPOL_EEDI);
	unsigned i;
	address |= 6 << 6;

        /* Shift the read command bits out. */
        for (i=0; i<11; i++) {
		eeprom_update(ee, ee->eedi, ((address >> 10) & 1) ^ pol);
		address <<= 1;
		eeprom_clk_hi(ee);
		eeprom_clk_lo(ee);
        }
	eeprom_update(ee, ee->eedi, pol);
}

u16   eeprom_readw(struct eeprom *ee, unsigned address)
{
	unsigned i;
	u16	res = 0;

	eeprom_clk_lo(ee);
	eeprom_update(ee, ee->eesel, 1 ^ !!(ee->polarity & EEPOL_EESEL));
	eeprom_send_addr(ee, address);

	for (i=0; i<16; i++) {
		u32 data;
		eeprom_clk_hi(ee);
		res <<= 1;
		data = readl(ee->addr);
//printk("eeprom_readw: %08x\n", data);
		res |= !!(data & ee->eedo) ^ !!(ee->polarity & EEPOL_EEDO);
		eeprom_clk_lo(ee);
	}
	eeprom_update(ee, ee->eesel, 0 ^ !!(ee->polarity & EEPOL_EESEL));

	return res;
}


void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data)
{
}