mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-13 00:20:06 +00:00
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: Inaky Perez-Gonzalez <inaky@linux.intel.com> Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
This commit is contained in:
parent
ead6823991
commit
10b1de6b77
@ -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 @@ error_kzalloc:
|
|||||||
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)
|
|||||||
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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user