Skip to content

Commit

Permalink
wl12xx: add support for fixed address in wl12xx_spi_read
Browse files Browse the repository at this point in the history
In the wl1271 implementation, we need to read memory from the register
partition using fixed addresses.  This change adds the possibility to request
fixed address when calling wl12xx_spi_read() or wl12xx_spi_reg_read().

Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Luciano Coelho authored and John W. Linville committed Jul 10, 2009
1 parent 27797d6 commit 052a625
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
12 changes: 8 additions & 4 deletions drivers/net/wireless/wl12xx/spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ int wl12xx_set_partition(struct wl12xx *wl,
}

void wl12xx_spi_read(struct wl12xx *wl, int addr, void *buf,
size_t len)
size_t len, bool fixed)
{
struct spi_transfer t[3];
struct spi_message m;
Expand All @@ -273,6 +273,9 @@ void wl12xx_spi_read(struct wl12xx *wl, int addr, void *buf,
*cmd |= (len << WSPI_CMD_BYTE_LENGTH_OFFSET) & WSPI_CMD_BYTE_LENGTH;
*cmd |= addr & WSPI_CMD_BYTE_ADDR;

if (fixed)
*cmd |= WSPI_CMD_FIXED;

spi_message_init(&m);
memset(t, 0, sizeof(t));

Expand Down Expand Up @@ -335,7 +338,7 @@ void wl12xx_spi_mem_read(struct wl12xx *wl, int addr, void *buf,

physical = wl12xx_translate_mem_addr(wl, addr);

wl12xx_spi_read(wl, physical, buf, len);
wl12xx_spi_read(wl, physical, buf, len, false);
}

void wl12xx_spi_mem_write(struct wl12xx *wl, int addr, void *buf,
Expand All @@ -348,13 +351,14 @@ void wl12xx_spi_mem_write(struct wl12xx *wl, int addr, void *buf,
wl12xx_spi_write(wl, physical, buf, len);
}

void wl12xx_spi_reg_read(struct wl12xx *wl, int addr, void *buf, size_t len)
void wl12xx_spi_reg_read(struct wl12xx *wl, int addr, void *buf, size_t len,
bool fixed)
{
int physical;

physical = wl12xx_translate_reg_addr(wl, addr);

wl12xx_spi_read(wl, physical, buf, len);
wl12xx_spi_read(wl, physical, buf, len, fixed);
}

void wl12xx_spi_reg_write(struct wl12xx *wl, int addr, void *buf, size_t len)
Expand Down
9 changes: 6 additions & 3 deletions drivers/net/wireless/wl12xx/spi.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,9 @@


/* Raw target IO, address is not translated */
void wl12xx_spi_read(struct wl12xx *wl, int addr, void *buf, size_t len);
void wl12xx_spi_write(struct wl12xx *wl, int addr, void *buf, size_t len);
void wl12xx_spi_read(struct wl12xx *wl, int addr, void *buf,
size_t len, bool fixed);

/* Memory target IO, address is tranlated to partition 0 */
void wl12xx_spi_mem_read(struct wl12xx *wl, int addr, void *buf, size_t len);
Expand All @@ -81,7 +82,8 @@ u32 wl12xx_mem_read32(struct wl12xx *wl, int addr);
void wl12xx_mem_write32(struct wl12xx *wl, int addr, u32 val);

/* Registers IO */
void wl12xx_spi_reg_read(struct wl12xx *wl, int addr, void *buf, size_t len);
void wl12xx_spi_reg_read(struct wl12xx *wl, int addr, void *buf, size_t len,
bool fixed);
void wl12xx_spi_reg_write(struct wl12xx *wl, int addr, void *buf,size_t len);
u32 wl12xx_reg_read32(struct wl12xx *wl, int addr);
void wl12xx_reg_write32(struct wl12xx *wl, int addr, u32 val);
Expand All @@ -95,7 +97,8 @@ int wl12xx_set_partition(struct wl12xx *wl,

static inline u32 wl12xx_read32(struct wl12xx *wl, int addr)
{
wl12xx_spi_read(wl, addr, &wl->buffer_32, sizeof(wl->buffer_32));
wl12xx_spi_read(wl, addr, &wl->buffer_32,
sizeof(wl->buffer_32), false);

return wl->buffer_32;
}
Expand Down

0 comments on commit 052a625

Please sign in to comment.