From: Dmitry Torokhov This is required for input_dev sysfs integration Signed-off-by: Dmitry Torokhov Signed-off-by: Andrew Morton --- net/bluetooth/hidp/core.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff -puN net/bluetooth/hidp/core.c~input-convert-net-bluetooth-to-dynamic-input_dev-allocation net/bluetooth/hidp/core.c --- devel/net/bluetooth/hidp/core.c~input-convert-net-bluetooth-to-dynamic-input_dev-allocation 2005-09-15 20:54:40.000000000 -0700 +++ devel-akpm/net/bluetooth/hidp/core.c 2005-09-15 20:54:40.000000000 -0700 @@ -520,7 +520,7 @@ static int hidp_session(void *arg) if (session->input) { input_unregister_device(session->input); - kfree(session->input); + session->input = NULL; } up_write(&hidp_session_sem); @@ -536,6 +536,8 @@ static inline void hidp_setup_input(stru input->private = session; + input->name = "Bluetooth HID Boot Protocol Device"; + input->id.bustype = BUS_BLUETOOTH; input->id.vendor = req->vendor; input->id.product = req->product; @@ -582,16 +584,15 @@ int hidp_add_connection(struct hidp_conn return -ENOTUNIQ; session = kmalloc(sizeof(struct hidp_session), GFP_KERNEL); - if (!session) + if (!session) return -ENOMEM; memset(session, 0, sizeof(struct hidp_session)); - session->input = kmalloc(sizeof(struct input_dev), GFP_KERNEL); + session->input = input_allocate_device(); if (!session->input) { kfree(session); return -ENOMEM; } - memset(session->input, 0, sizeof(struct input_dev)); down_write(&hidp_session_sem); @@ -651,8 +652,10 @@ unlink: __hidp_unlink_session(session); - if (session->input) + if (session->input) { input_unregister_device(session->input); + session->input = NULL; /* don't try to free it here */ + } failed: up_write(&hidp_session_sem); _