Commit 4ded91ce authored by Luciano Coelho's avatar Luciano Coelho

wlcore/wl12xx: move get_pg_ver to the lower driver

The PG version depends on the actual hardware.  This commit moves the
code used to read the PG version to the lower driver, by adding the
get_pg_ver hardware operation.
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent 6f7dd16c
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "../wlcore/wlcore.h" #include "../wlcore/wlcore.h"
#include "../wlcore/debug.h" #include "../wlcore/debug.h"
#include "../wlcore/io.h"
#include "reg.h" #include "reg.h"
...@@ -180,8 +181,21 @@ static int wl12xx_identify_chip(struct wl1271 *wl) ...@@ -180,8 +181,21 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
return ret; return ret;
} }
static s8 wl12xx_get_pg_ver(struct wl1271 *wl)
{
u32 die_info;
if (wl->chip.id == CHIP_ID_1283_PG20)
die_info = wl1271_top_reg_read(wl, WL128X_REG_FUSE_DATA_2_1);
else
die_info = wl1271_top_reg_read(wl, WL127X_REG_FUSE_DATA_2_1);
return (s8) (die_info & PG_VER_MASK) >> PG_VER_OFFSET;
}
static struct wlcore_ops wl12xx_ops = { static struct wlcore_ops wl12xx_ops = {
.identify_chip = wl12xx_identify_chip, .identify_chip = wl12xx_identify_chip,
.get_pg_ver = wl12xx_get_pg_ver,
}; };
static int __devinit wl12xx_probe(struct platform_device *pdev) static int __devinit wl12xx_probe(struct platform_device *pdev)
......
...@@ -219,3 +219,4 @@ u16 wl1271_top_reg_read(struct wl1271 *wl, int addr) ...@@ -219,3 +219,4 @@ u16 wl1271_top_reg_read(struct wl1271 *wl, int addr)
return 0xffff; return 0xffff;
} }
} }
EXPORT_SYMBOL_GPL(wl1271_top_reg_read);
...@@ -5066,7 +5066,6 @@ static void wl12xx_get_fuse_mac(struct wl1271 *wl) ...@@ -5066,7 +5066,6 @@ static void wl12xx_get_fuse_mac(struct wl1271 *wl)
static int wl12xx_get_hw_info(struct wl1271 *wl) static int wl12xx_get_hw_info(struct wl1271 *wl)
{ {
int ret; int ret;
u32 die_info;
ret = wl12xx_set_power_on(wl); ret = wl12xx_set_power_on(wl);
if (ret < 0) if (ret < 0)
...@@ -5077,20 +5076,11 @@ static int wl12xx_get_hw_info(struct wl1271 *wl) ...@@ -5077,20 +5076,11 @@ static int wl12xx_get_hw_info(struct wl1271 *wl)
wl->fuse_oui_addr = 0; wl->fuse_oui_addr = 0;
wl->fuse_nic_addr = 0; wl->fuse_nic_addr = 0;
/* TODO: properly detect PG ver and read MAC addr in other families */ wl->hw_pg_ver = wl->ops->get_pg_ver(wl);
if (wl->chip.id == CHIP_ID_1283_PG20)
die_info = wl1271_top_reg_read(wl, WL128X_REG_FUSE_DATA_2_1);
else if (wl->chip.id < CHIP_ID_1283_PG20)
die_info = wl1271_top_reg_read(wl, WL127X_REG_FUSE_DATA_2_1);
else
goto skip_mac;
wl->hw_pg_ver = (s8) (die_info & PG_VER_MASK) >> PG_VER_OFFSET;
if (wl12xx_mac_in_fuse(wl)) if (wl12xx_mac_in_fuse(wl))
wl12xx_get_fuse_mac(wl); wl12xx_get_fuse_mac(wl);
skip_mac:
wl1271_power_off(wl); wl1271_power_off(wl);
out: out:
return ret; return ret;
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
struct wlcore_ops { struct wlcore_ops {
int (*identify_chip)(struct wl1271 *wl); int (*identify_chip)(struct wl1271 *wl);
s8 (*get_pg_ver)(struct wl1271 *wl);
}; };
enum wlcore_partitions { enum wlcore_partitions {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment