/* Ultimately this should return the number of devices with the given default id. And it does it now ! Note: changed behaviour: This function will now register if default_id _and_ handler_id both match but handler_id can be left to 0 to match with default_id only. When handler_id is set, this function will try to adjust the handler_id id it doesn't match. */ int adb_register(int default_id, int handler_id, struct adb_ids *ids, void (*handler)(unsigned char *, int, struct pt_regs *, int)) { int i; down(&adb_handler_sem); ids->nids = 0; for (i = 1; i < 16; i++) { if ((adb_handler[i].original_address == default_id) && (!handler_id || (handler_id == adb_handler[i].handler_id) || try_handler_change(i, handler_id))) { if (adb_handler[i].handler != 0) { printk(KERN_ERR "Two handlers for ADB device %d\n", default_id); continue; } write_lock_irq(&adb_handler_lock); adb_handler[i].handler = handler; write_unlock_irq(&adb_handler_lock); ids->id[ids->nids++] = i; } } up(&adb_handler_sem); return ids->nids; }
int adb_try_handler_change(int address, int new_id) { int ret; down(&adb_handler_sem); ret = try_handler_change(address, new_id); up(&adb_handler_sem); return ret; }
int adb_try_handler_change(int address, int new_id) { int ret; mutex_lock(&adb_handler_mutex); ret = try_handler_change(address, new_id); mutex_unlock(&adb_handler_mutex); return ret; }
int adb_try_handler_change(int address, int new_id) { int ret; mutex_lock(&adb_handler_mutex); ret = try_handler_change(address, new_id); mutex_unlock(&adb_handler_mutex); if (ret) pr_debug("adb handler change: [%d] 0x%X\n", address, new_id); return ret; }