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

Commit 08d9f572 authored by Bob Copeland's avatar Bob Copeland Committed by John W. Linville
Browse files

wl1251: introduce wl1251_if_operations struct



Introduce an ops struct with read, write, and reset functions to
abstract away the details of the wl1251 bus interface.  Doing this
will allow SDIO to coexist with SPI by supplying its own I/O
routines.

Signed-off-by: default avatarBob Copeland <me@bobcopeland.com>
Signed-off-by: default avatarKalle Valo <kalle.valo@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 6c766f41
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -281,11 +281,18 @@ struct wl1251_debugfs {
	struct dentry *excessive_retries;
};

struct wl1251_if_operations {
	void (*read)(struct wl1251 *wl, int addr, void *buf, size_t len);
	void (*write)(struct wl1251 *wl, int addr, void *buf, size_t len);
	void (*reset)(struct wl1251 *wl);
};

struct wl1251 {
	struct ieee80211_hw *hw;
	bool mac80211_registered;

	struct spi_device *spi;
	struct wl1251_if_operations *if_ops;

	void (*set_power)(bool enable);
	int irq;
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include "reg.h"
#include "wl1251_boot.h"
#include "wl1251_io.h"
#include "wl1251_spi.h"
#include "wl1251_event.h"

static void wl1251_boot_enable_interrupts(struct wl1251 *wl)
+2 −2
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ void wl1251_mem_read(struct wl1251 *wl, int addr, void *buf, size_t len)

	physical = wl1251_translate_mem_addr(wl, addr);

	wl1251_spi_read(wl, physical, buf, len);
	wl->if_ops->read(wl, physical, buf, len);
}

void wl1251_mem_write(struct wl1251 *wl, int addr, void *buf, size_t len)
@@ -62,7 +62,7 @@ void wl1251_mem_write(struct wl1251 *wl, int addr, void *buf, size_t len)

	physical = wl1251_translate_mem_addr(wl, addr);

	wl1251_spi_write(wl, physical, buf, len);
	wl->if_ops->write(wl, physical, buf, len);
}

u32 wl1251_mem_read32(struct wl1251 *wl, int addr)
+2 −7
Original line number Diff line number Diff line
@@ -22,24 +22,19 @@
#define __WL1251_IO_H__

#include "wl1251.h"
#include "wl1251_spi.h"

/* Raw target IO, address is not translated */
void wl1251_spi_read(struct wl1251 *wl, int addr, void *buf, size_t len);
void wl1251_spi_write(struct wl1251 *wl, int addr, void *buf, size_t len);

static inline u32 wl1251_read32(struct wl1251 *wl, int addr)
{
	u32 response;

	wl1251_spi_read(wl, addr, &response, sizeof(u32));
	wl->if_ops->read(wl, addr, &response, sizeof(u32));

	return response;
}

static inline void wl1251_write32(struct wl1251 *wl, int addr, u32 val)
{
	wl1251_spi_write(wl, addr, &val, sizeof(u32));
	wl->if_ops->write(wl, addr, &val, sizeof(u32));
}

/* Memory target IO, address is translated to partition 0 */
+4 −2
Original line number Diff line number Diff line
@@ -168,8 +168,7 @@ static int wl1251_chip_wakeup(struct wl1251 *wl)

	wl1251_power_on(wl);
	msleep(wl->chip.power_on_sleep);
	wl1251_spi_reset(wl);
	wl1251_spi_init(wl);
	wl->if_ops->reset(wl);

	/* We don't need a real memory partition here, because we only want
	 * to use the registers at this point. */
@@ -1192,6 +1191,8 @@ static int wl1251_init_ieee80211(struct wl1251 *wl)
	return 0;
}

extern struct wl1251_if_operations wl1251_spi_ops;

#define WL1251_DEFAULT_CHANNEL 1
static int __devinit wl1251_probe(struct spi_device *spi)
{
@@ -1219,6 +1220,7 @@ static int __devinit wl1251_probe(struct spi_device *spi)
	wl->hw = hw;
	dev_set_drvdata(&spi->dev, wl);
	wl->spi = spi;
	wl->if_ops = &wl1251_spi_ops;

	wl->data_in_count = 0;

Loading