ssb: Fix SPROM writing
The SPROM writing routines were broken since we rewrote the suspend handling on wireless devices, because SPROM writing depended on suspend. This patch changes it and freezes devices with the driver remove(), probe() callbacks instead. This also simplifies the whole logics a lot. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
77593ae28c
commit
3ba6018aa3
@@ -90,6 +90,7 @@ ssize_t ssb_attr_sprom_store(struct ssb_bus *bus,
|
||||
u16 *sprom;
|
||||
int res = 0, err = -ENOMEM;
|
||||
size_t sprom_size_words = bus->sprom_size;
|
||||
struct ssb_freeze_context freeze;
|
||||
|
||||
sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
|
||||
if (!sprom)
|
||||
@@ -111,18 +112,13 @@ ssize_t ssb_attr_sprom_store(struct ssb_bus *bus,
|
||||
err = -ERESTARTSYS;
|
||||
if (mutex_lock_interruptible(&bus->sprom_mutex))
|
||||
goto out_kfree;
|
||||
err = ssb_devices_freeze(bus);
|
||||
if (err == -EOPNOTSUPP) {
|
||||
ssb_printk(KERN_ERR PFX "SPROM write: Could not freeze devices. "
|
||||
"No suspend support. Is CONFIG_PM enabled?\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
err = ssb_devices_freeze(bus, &freeze);
|
||||
if (err) {
|
||||
ssb_printk(KERN_ERR PFX "SPROM write: Could not freeze all devices\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
res = sprom_write(bus, sprom);
|
||||
err = ssb_devices_thaw(bus);
|
||||
err = ssb_devices_thaw(&freeze);
|
||||
if (err)
|
||||
ssb_printk(KERN_ERR PFX "SPROM write: Could not thaw all devices\n");
|
||||
out_unlock:
|
||||
|
Reference in New Issue
Block a user