Loading drivers/staging/line6/variax.c +79 −51 Original line number Diff line number Diff line Loading @@ -46,7 +46,8 @@ static const char variax_request_model2[] = { /* Decode data transmitted by workbench. */ static void variax_decode(const unsigned char *raw_data, unsigned char *data, int raw_size) static void variax_decode(const unsigned char *raw_data, unsigned char *data, int raw_size) { for (; raw_size > 0; raw_size -= 6) { data[2] = raw_data[0] | (raw_data[1] << 4); Loading @@ -61,13 +62,15 @@ static void variax_activate_timeout(unsigned long arg) { struct usb_line6_variax *variax = (struct usb_line6_variax *)arg; variax->buffer_activate[VARIAX_OFFSET_ACTIVATE] = 1; line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); } /* Send an asynchronous activation request after a given interval. */ static void variax_activate_delayed(struct usb_line6_variax *variax, int seconds) static void variax_activate_delayed(struct usb_line6_variax *variax, int seconds) { variax->activate_timer.expires = jiffies + seconds * HZ; variax->activate_timer.function = variax_activate_timeout; Loading @@ -83,7 +86,8 @@ static void variax_startup_timeout(unsigned long arg) return; line6_dump_request_async(&variax->dumpreq, &variax->line6, 0); line6_startup_delayed(&variax->dumpreq, 1, variax_startup_timeout, variax); line6_startup_delayed(&variax->dumpreq, 1, variax_startup_timeout, variax); } /* Loading Loading @@ -118,8 +122,10 @@ void variax_process_message(struct usb_line6_variax *variax) break; case LINE6_SYSEX_BEGIN: if(memcmp(buf + 1, variax_request_model1 + 1, VARIAX_MODEL_HEADER_LENGTH - 1) == 0) { if(variax->line6.message_length == VARIAX_MODEL_MESSAGE_LENGTH) { if (memcmp(buf + 1, variax_request_model1 + 1, VARIAX_MODEL_HEADER_LENGTH - 1) == 0) { if (variax->line6.message_length == VARIAX_MODEL_MESSAGE_LENGTH) { switch (variax->dumpreq.in_progress) { case VARIAX_DUMP_PASS1: variax_decode(buf + VARIAX_MODEL_HEADER_LENGTH, (unsigned char *)&variax->model_data, Loading @@ -137,14 +143,15 @@ void variax_process_message(struct usb_line6_variax *variax) line6_dump_request_async(&variax->dumpreq, &variax->line6, 2); line6_dump_started(&variax->dumpreq, VARIAX_DUMP_PASS3); } } else { } else { DEBUG_MESSAGES(dev_err(variax->line6.ifcdev, "illegal length %d of model data\n", variax->line6.message_length)); line6_dump_finished(&variax->dumpreq); } } else if(memcmp(buf + 1, variax_request_bank + 1, sizeof(variax_request_bank) - 2) == 0) { memcpy(variax->bank, buf + sizeof(variax_request_bank) - 1, sizeof(variax->bank)); } else if (memcmp(buf + 1, variax_request_bank + 1, sizeof(variax_request_bank) - 2) == 0) { memcpy(variax->bank, buf + sizeof(variax_request_bank) - 1, sizeof(variax->bank)); variax->dumpreq.ok = 1; line6_dump_finished(&variax->dumpreq); } Loading Loading @@ -179,7 +186,8 @@ static ssize_t variax_set_volume(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int value = simple_strtoul(buf, NULL, 10); if(line6_transmit_parameter(&variax->line6, VARIAXMIDI_volume, value) == 0) if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_volume, value) == 0) variax->volume = value; return count; Loading Loading @@ -231,7 +239,8 @@ static ssize_t variax_set_active(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int value = simple_strtoul(buf, NULL, 10) ? 1 : 0; variax->buffer_activate[VARIAX_OFFSET_ACTIVATE] = value; line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); return count; } Loading @@ -255,7 +264,8 @@ static ssize_t variax_set_tone(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int value = simple_strtoul(buf, NULL, 10); if(line6_transmit_parameter(&variax->line6, VARIAXMIDI_tone, value) == 0) if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_tone, value) == 0) variax->tone = value; return count; Loading Loading @@ -285,7 +295,8 @@ static ssize_t variax_get_name(struct device *dev, { struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); line6_wait_dump(&variax->dumpreq, 0); return get_string(buf, variax->model_data.name, sizeof(variax->model_data.name)); return get_string(buf, variax->model_data.name, sizeof(variax->model_data.name)); } /* Loading @@ -308,8 +319,10 @@ static ssize_t variax_get_dump(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int retval; retval = line6_wait_dump(&variax->dumpreq, 0); if(retval < 0) return retval; memcpy(buf, &variax->model_data.control, sizeof(variax->model_data.control)); if (retval < 0) return retval; memcpy(buf, &variax->model_data.control, sizeof(variax->model_data.control)); return sizeof(variax->model_data.control); } Loading Loading @@ -375,9 +388,11 @@ static void variax_destruct(struct usb_interface *interface) struct usb_line6_variax *variax = usb_get_intfdata(interface); struct usb_line6 *line6; if(variax == NULL) return; if (variax == NULL) return; line6 = &variax->line6; if(line6 == NULL) return; if (line6 == NULL) return; line6_cleanup_audio(line6); /* free dump request data: */ Loading @@ -385,7 +400,7 @@ static void variax_destruct(struct usb_interface *interface) line6_dumpreq_destructbuf(&variax->dumpreq, 1); line6_dumpreq_destruct(&variax->dumpreq); if(variax->buffer_activate) kfree(variax->buffer_activate); kfree(variax->buffer_activate); del_timer_sync(&variax->activate_timer); } Loading @@ -412,14 +427,17 @@ static int variax_create_files2(struct device *dev) /* Init workbench device. */ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax) int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax) { int err; if((interface == NULL) || (variax == NULL)) return -ENODEV; if ((interface == NULL) || (variax == NULL)) return -ENODEV; /* initialize USB buffers: */ err = line6_dumpreq_init(&variax->dumpreq, variax_request_model1, sizeof(variax_request_model1)); err = line6_dumpreq_init(&variax->dumpreq, variax_request_model1, sizeof(variax_request_model1)); if (err < 0) { dev_err(&interface->dev, "Out of memory\n"); Loading @@ -427,7 +445,8 @@ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax return err; } err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_model2, sizeof(variax_request_model2), 1); err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_model2, sizeof(variax_request_model2), 1); if (err < 0) { dev_err(&interface->dev, "Out of memory\n"); Loading @@ -435,7 +454,8 @@ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax return err; } err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_bank, sizeof(variax_request_bank), 2); err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_bank, sizeof(variax_request_bank), 2); if (err < 0) { dev_err(&interface->dev, "Out of memory\n"); Loading @@ -451,40 +471,47 @@ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax return -ENOMEM; } memcpy(variax->buffer_activate, variax_activate, sizeof(variax_activate)); memcpy(variax->buffer_activate, variax_activate, sizeof(variax_activate)); init_timer(&variax->activate_timer); /* create sysfs entries: */ if((err = variax_create_files(0, 0, &interface->dev)) < 0) { err = variax_create_files(0, 0, &interface->dev); if (err < 0) { variax_destruct(interface); return err; } if((err = variax_create_files2(&interface->dev)) < 0) { err = variax_create_files2(&interface->dev); if (err < 0) { variax_destruct(interface); return err; } /* initialize audio system: */ if((err = line6_init_audio(&variax->line6)) < 0) { err = line6_init_audio(&variax->line6); if (err < 0) { variax_destruct(interface); return err; } /* initialize MIDI subsystem: */ if((err = line6_init_midi(&variax->line6)) < 0) { err = line6_init_midi(&variax->line6); if (err < 0) { variax_destruct(interface); return err; } /* register audio system: */ if((err = line6_register_audio(&variax->line6)) < 0) { err = line6_register_audio(&variax->line6); if (err < 0) { variax_destruct(interface); return err; } variax_activate_delayed(variax, VARIAX_ACTIVATE_DELAY); line6_startup_delayed(&variax->dumpreq, VARIAX_STARTUP_DELAY, variax_startup_timeout, variax); line6_startup_delayed(&variax->dumpreq, VARIAX_STARTUP_DELAY, variax_startup_timeout, variax); return 0; } Loading @@ -495,7 +522,8 @@ void variax_disconnect(struct usb_interface *interface) { struct device *dev; if(interface == NULL) return; if (interface == NULL) return; dev = &interface->dev; if (dev != NULL) { Loading Loading
drivers/staging/line6/variax.c +79 −51 Original line number Diff line number Diff line Loading @@ -46,7 +46,8 @@ static const char variax_request_model2[] = { /* Decode data transmitted by workbench. */ static void variax_decode(const unsigned char *raw_data, unsigned char *data, int raw_size) static void variax_decode(const unsigned char *raw_data, unsigned char *data, int raw_size) { for (; raw_size > 0; raw_size -= 6) { data[2] = raw_data[0] | (raw_data[1] << 4); Loading @@ -61,13 +62,15 @@ static void variax_activate_timeout(unsigned long arg) { struct usb_line6_variax *variax = (struct usb_line6_variax *)arg; variax->buffer_activate[VARIAX_OFFSET_ACTIVATE] = 1; line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); } /* Send an asynchronous activation request after a given interval. */ static void variax_activate_delayed(struct usb_line6_variax *variax, int seconds) static void variax_activate_delayed(struct usb_line6_variax *variax, int seconds) { variax->activate_timer.expires = jiffies + seconds * HZ; variax->activate_timer.function = variax_activate_timeout; Loading @@ -83,7 +86,8 @@ static void variax_startup_timeout(unsigned long arg) return; line6_dump_request_async(&variax->dumpreq, &variax->line6, 0); line6_startup_delayed(&variax->dumpreq, 1, variax_startup_timeout, variax); line6_startup_delayed(&variax->dumpreq, 1, variax_startup_timeout, variax); } /* Loading Loading @@ -118,8 +122,10 @@ void variax_process_message(struct usb_line6_variax *variax) break; case LINE6_SYSEX_BEGIN: if(memcmp(buf + 1, variax_request_model1 + 1, VARIAX_MODEL_HEADER_LENGTH - 1) == 0) { if(variax->line6.message_length == VARIAX_MODEL_MESSAGE_LENGTH) { if (memcmp(buf + 1, variax_request_model1 + 1, VARIAX_MODEL_HEADER_LENGTH - 1) == 0) { if (variax->line6.message_length == VARIAX_MODEL_MESSAGE_LENGTH) { switch (variax->dumpreq.in_progress) { case VARIAX_DUMP_PASS1: variax_decode(buf + VARIAX_MODEL_HEADER_LENGTH, (unsigned char *)&variax->model_data, Loading @@ -137,14 +143,15 @@ void variax_process_message(struct usb_line6_variax *variax) line6_dump_request_async(&variax->dumpreq, &variax->line6, 2); line6_dump_started(&variax->dumpreq, VARIAX_DUMP_PASS3); } } else { } else { DEBUG_MESSAGES(dev_err(variax->line6.ifcdev, "illegal length %d of model data\n", variax->line6.message_length)); line6_dump_finished(&variax->dumpreq); } } else if(memcmp(buf + 1, variax_request_bank + 1, sizeof(variax_request_bank) - 2) == 0) { memcpy(variax->bank, buf + sizeof(variax_request_bank) - 1, sizeof(variax->bank)); } else if (memcmp(buf + 1, variax_request_bank + 1, sizeof(variax_request_bank) - 2) == 0) { memcpy(variax->bank, buf + sizeof(variax_request_bank) - 1, sizeof(variax->bank)); variax->dumpreq.ok = 1; line6_dump_finished(&variax->dumpreq); } Loading Loading @@ -179,7 +186,8 @@ static ssize_t variax_set_volume(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int value = simple_strtoul(buf, NULL, 10); if(line6_transmit_parameter(&variax->line6, VARIAXMIDI_volume, value) == 0) if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_volume, value) == 0) variax->volume = value; return count; Loading Loading @@ -231,7 +239,8 @@ static ssize_t variax_set_active(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int value = simple_strtoul(buf, NULL, 10) ? 1 : 0; variax->buffer_activate[VARIAX_OFFSET_ACTIVATE] = value; line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); line6_send_raw_message_async(&variax->line6, variax->buffer_activate, sizeof(variax_activate)); return count; } Loading @@ -255,7 +264,8 @@ static ssize_t variax_set_tone(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int value = simple_strtoul(buf, NULL, 10); if(line6_transmit_parameter(&variax->line6, VARIAXMIDI_tone, value) == 0) if (line6_transmit_parameter(&variax->line6, VARIAXMIDI_tone, value) == 0) variax->tone = value; return count; Loading Loading @@ -285,7 +295,8 @@ static ssize_t variax_get_name(struct device *dev, { struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); line6_wait_dump(&variax->dumpreq, 0); return get_string(buf, variax->model_data.name, sizeof(variax->model_data.name)); return get_string(buf, variax->model_data.name, sizeof(variax->model_data.name)); } /* Loading @@ -308,8 +319,10 @@ static ssize_t variax_get_dump(struct device *dev, struct usb_line6_variax *variax = usb_get_intfdata(to_usb_interface(dev)); int retval; retval = line6_wait_dump(&variax->dumpreq, 0); if(retval < 0) return retval; memcpy(buf, &variax->model_data.control, sizeof(variax->model_data.control)); if (retval < 0) return retval; memcpy(buf, &variax->model_data.control, sizeof(variax->model_data.control)); return sizeof(variax->model_data.control); } Loading Loading @@ -375,9 +388,11 @@ static void variax_destruct(struct usb_interface *interface) struct usb_line6_variax *variax = usb_get_intfdata(interface); struct usb_line6 *line6; if(variax == NULL) return; if (variax == NULL) return; line6 = &variax->line6; if(line6 == NULL) return; if (line6 == NULL) return; line6_cleanup_audio(line6); /* free dump request data: */ Loading @@ -385,7 +400,7 @@ static void variax_destruct(struct usb_interface *interface) line6_dumpreq_destructbuf(&variax->dumpreq, 1); line6_dumpreq_destruct(&variax->dumpreq); if(variax->buffer_activate) kfree(variax->buffer_activate); kfree(variax->buffer_activate); del_timer_sync(&variax->activate_timer); } Loading @@ -412,14 +427,17 @@ static int variax_create_files2(struct device *dev) /* Init workbench device. */ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax) int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax) { int err; if((interface == NULL) || (variax == NULL)) return -ENODEV; if ((interface == NULL) || (variax == NULL)) return -ENODEV; /* initialize USB buffers: */ err = line6_dumpreq_init(&variax->dumpreq, variax_request_model1, sizeof(variax_request_model1)); err = line6_dumpreq_init(&variax->dumpreq, variax_request_model1, sizeof(variax_request_model1)); if (err < 0) { dev_err(&interface->dev, "Out of memory\n"); Loading @@ -427,7 +445,8 @@ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax return err; } err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_model2, sizeof(variax_request_model2), 1); err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_model2, sizeof(variax_request_model2), 1); if (err < 0) { dev_err(&interface->dev, "Out of memory\n"); Loading @@ -435,7 +454,8 @@ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax return err; } err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_bank, sizeof(variax_request_bank), 2); err = line6_dumpreq_initbuf(&variax->dumpreq, variax_request_bank, sizeof(variax_request_bank), 2); if (err < 0) { dev_err(&interface->dev, "Out of memory\n"); Loading @@ -451,40 +471,47 @@ int variax_init(struct usb_interface *interface, struct usb_line6_variax *variax return -ENOMEM; } memcpy(variax->buffer_activate, variax_activate, sizeof(variax_activate)); memcpy(variax->buffer_activate, variax_activate, sizeof(variax_activate)); init_timer(&variax->activate_timer); /* create sysfs entries: */ if((err = variax_create_files(0, 0, &interface->dev)) < 0) { err = variax_create_files(0, 0, &interface->dev); if (err < 0) { variax_destruct(interface); return err; } if((err = variax_create_files2(&interface->dev)) < 0) { err = variax_create_files2(&interface->dev); if (err < 0) { variax_destruct(interface); return err; } /* initialize audio system: */ if((err = line6_init_audio(&variax->line6)) < 0) { err = line6_init_audio(&variax->line6); if (err < 0) { variax_destruct(interface); return err; } /* initialize MIDI subsystem: */ if((err = line6_init_midi(&variax->line6)) < 0) { err = line6_init_midi(&variax->line6); if (err < 0) { variax_destruct(interface); return err; } /* register audio system: */ if((err = line6_register_audio(&variax->line6)) < 0) { err = line6_register_audio(&variax->line6); if (err < 0) { variax_destruct(interface); return err; } variax_activate_delayed(variax, VARIAX_ACTIVATE_DELAY); line6_startup_delayed(&variax->dumpreq, VARIAX_STARTUP_DELAY, variax_startup_timeout, variax); line6_startup_delayed(&variax->dumpreq, VARIAX_STARTUP_DELAY, variax_startup_timeout, variax); return 0; } Loading @@ -495,7 +522,8 @@ void variax_disconnect(struct usb_interface *interface) { struct device *dev; if(interface == NULL) return; if (interface == NULL) return; dev = &interface->dev; if (dev != NULL) { Loading