|
@@ -195,6 +195,7 @@ void abc_register(struct abc_dev *dev, unsigned int devsel)
|
|
|
|
|
|
irqmask_t irqmask = mask_irq(ABC_IRQ);
|
|
|
unsigned int old_devsel = DEVSEL_NONE;
|
|
|
+ struct abc_dev *old_dev = NULL;
|
|
|
|
|
|
if (dev) {
|
|
|
if (dev->devsel < DEVSEL_NONE && abc_device[dev->devsel] == dev) {
|
|
@@ -211,8 +212,9 @@ void abc_register(struct abc_dev *dev, unsigned int devsel)
|
|
|
}
|
|
|
|
|
|
if (devsel < DEVSEL_NONE) {
|
|
|
- if (abc_device[devsel])
|
|
|
- abc_device[devsel]->devsel = DEVSEL_NONE;
|
|
|
+ old_dev = abc_device[devsel];
|
|
|
+ if (old_dev)
|
|
|
+ old_dev->devsel = DEVSEL_NONE;
|
|
|
|
|
|
abc_device[devsel] = dev;
|
|
|
if (devsel == abc_devsel)
|
|
@@ -223,8 +225,14 @@ done:
|
|
|
restore_irq(irqmask, ABC_IRQ);
|
|
|
|
|
|
if (dev) {
|
|
|
+ if (old_dev) {
|
|
|
+ con_printf("[ABC] Unregistered device %s from devsel %u\n",
|
|
|
+ old_dev->name, devsel);
|
|
|
+ }
|
|
|
if (old_devsel < DEVSEL_NONE) {
|
|
|
- if (devsel < DEVSEL_NONE) {
|
|
|
+ if (devsel == old_devsel) {
|
|
|
+ /* Print nothing */
|
|
|
+ } else if (devsel < DEVSEL_NONE) {
|
|
|
con_printf("[ABC] Moved device %s from devsel %u to %u\n",
|
|
|
dev->name, old_devsel, devsel);
|
|
|
} else {
|