Commit 10b1de6b authored by Dirk Brandewie's avatar Dirk Brandewie Committed by Inaky Perez-Gonzalez

wimax/i2400m/sdio: Implement I2400M_RT_BUS reset type

This reset type causes the WiMAX function to be disabled and
re-enabled, which will force the WiMAX device to reset and enter boot
mode.
Signed-off-by: default avatarInaky Perez-Gonzalez <inaky@linux.intel.com>
Signed-off-by: default avatarDirk Brandewie <dirk.j.brandewie@intel.com>
parent ead68239
...@@ -78,6 +78,8 @@ enum { ...@@ -78,6 +78,8 @@ enum {
/* The number of ticks to wait for the device to signal that /* The number of ticks to wait for the device to signal that
* it is ready */ * it is ready */
I2400MS_INIT_SLEEP_INTERVAL = 10, I2400MS_INIT_SLEEP_INTERVAL = 10,
/* How long to wait for the device to settle after reset */
I2400MS_SETTLE_TIME = 40,
}; };
......
...@@ -255,7 +255,7 @@ int __i2400ms_send_barker(struct i2400ms *i2400ms, ...@@ -255,7 +255,7 @@ int __i2400ms_send_barker(struct i2400ms *i2400ms,
static static
int i2400ms_bus_reset(struct i2400m *i2400m, enum i2400m_reset_type rt) int i2400ms_bus_reset(struct i2400m *i2400m, enum i2400m_reset_type rt)
{ {
int result; int result = 0;
struct i2400ms *i2400ms = struct i2400ms *i2400ms =
container_of(i2400m, struct i2400ms, i2400m); container_of(i2400m, struct i2400ms, i2400m);
struct device *dev = i2400m_dev(i2400m); struct device *dev = i2400m_dev(i2400m);
...@@ -280,8 +280,22 @@ int i2400ms_bus_reset(struct i2400m *i2400m, enum i2400m_reset_type rt) ...@@ -280,8 +280,22 @@ int i2400ms_bus_reset(struct i2400m *i2400m, enum i2400m_reset_type rt)
sizeof(i2400m_COLD_BOOT_BARKER)); sizeof(i2400m_COLD_BOOT_BARKER));
else if (rt == I2400M_RT_BUS) { else if (rt == I2400M_RT_BUS) {
do_bus_reset: do_bus_reset:
dev_err(dev, "FIXME: SDIO bus reset not implemented\n"); /* call netif_tx_disable() before sending IOE disable,
result = rt == I2400M_RT_WARM ? -ENODEV : -ENOSYS; * so that all the tx from network layer are stopped
* while IOE is being reset. Make sure it is called
* only after register_netdev() was issued.
*/
if (i2400m->wimax_dev.net_dev->reg_state == NETREG_REGISTERED)
netif_tx_disable(i2400m->wimax_dev.net_dev);
sdio_claim_host(i2400ms->func);
sdio_disable_func(i2400ms->func);
sdio_release_host(i2400ms->func);
/* Wait for the device to settle */
msleep(40);
result = i2400ms_enable_function(i2400ms->func);
} else } else
BUG(); BUG();
if (result < 0 && rt != I2400M_RT_BUS) { if (result < 0 && rt != I2400M_RT_BUS) {
......
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