diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c index 83ed48d206b2..880615f93816 100644 --- a/drivers/net/wireless/ti/wl12xx/main.c +++ b/drivers/net/wireless/ti/wl12xx/main.c @@ -26,6 +26,7 @@ #include "../wlcore/wlcore.h" #include "../wlcore/debug.h" +#include "../wlcore/io.h" #include "reg.h" @@ -180,8 +181,21 @@ static int wl12xx_identify_chip(struct wl1271 *wl) 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 = { .identify_chip = wl12xx_identify_chip, + .get_pg_ver = wl12xx_get_pg_ver, }; static int __devinit wl12xx_probe(struct platform_device *pdev) diff --git a/drivers/net/wireless/ti/wlcore/io.c b/drivers/net/wireless/ti/wlcore/io.c index 30c60e3e73f1..08cfa39ac7ca 100644 --- a/drivers/net/wireless/ti/wlcore/io.c +++ b/drivers/net/wireless/ti/wlcore/io.c @@ -219,3 +219,4 @@ u16 wl1271_top_reg_read(struct wl1271 *wl, int addr) return 0xffff; } } +EXPORT_SYMBOL_GPL(wl1271_top_reg_read); diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c index 95d247198287..20f3d2234663 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c @@ -5066,7 +5066,6 @@ static void wl12xx_get_fuse_mac(struct wl1271 *wl) static int wl12xx_get_hw_info(struct wl1271 *wl) { int ret; - u32 die_info; ret = wl12xx_set_power_on(wl); if (ret < 0) @@ -5077,20 +5076,11 @@ static int wl12xx_get_hw_info(struct wl1271 *wl) wl->fuse_oui_addr = 0; wl->fuse_nic_addr = 0; - /* TODO: properly detect PG ver and read MAC addr in other families */ - 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; + wl->hw_pg_ver = wl->ops->get_pg_ver(wl); if (wl12xx_mac_in_fuse(wl)) wl12xx_get_fuse_mac(wl); -skip_mac: wl1271_power_off(wl); out: return ret; diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h index 92455e91b79d..f49e03541e47 100644 --- a/drivers/net/wireless/ti/wlcore/wlcore.h +++ b/drivers/net/wireless/ti/wlcore/wlcore.h @@ -29,6 +29,7 @@ struct wlcore_ops { int (*identify_chip)(struct wl1271 *wl); + s8 (*get_pg_ver)(struct wl1271 *wl); }; enum wlcore_partitions {