blob: 3e3f1671337ad0c9594ff1533bc09e8080ee2bb8 [file] [log] [blame]
Markus Grabner705ecec2009-02-27 19:43:04 -08001/*
Markus Grabnere1a164d2010-08-23 01:08:25 +02002 * Line6 Linux USB driver - 0.9.1beta
Markus Grabner705ecec2009-02-27 19:43:04 -08003 *
Markus Grabner1027f4762010-08-12 01:35:30 +02004 * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
Markus Grabner705ecec2009-02-27 19:43:04 -08005 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation, version 2.
9 *
10 */
11
12#ifndef POD_H
13#define POD_H
14
Markus Grabner1027f4762010-08-12 01:35:30 +020015#include <linux/interrupt.h>
Markus Grabner705ecec2009-02-27 19:43:04 -080016#include <linux/spinlock.h>
17#include <linux/usb.h>
Markus Grabner705ecec2009-02-27 19:43:04 -080018
19#include <sound/core.h>
20
Markus Grabner1027f4762010-08-12 01:35:30 +020021#include "driver.h"
Markus Grabner705ecec2009-02-27 19:43:04 -080022
Markus Grabner705ecec2009-02-27 19:43:04 -080023/*
24 PODxt Live interfaces
25*/
26#define PODXTLIVE_INTERFACE_POD 0
27#define PODXTLIVE_INTERFACE_VARIAX 1
28
29/*
30 Locate name in binary program dump
31*/
32#define POD_NAME_OFFSET 0
33#define POD_NAME_LENGTH 16
34
35/*
36 Other constants
37*/
38#define POD_CONTROL_SIZE 0x80
39#define POD_BUFSIZE_DUMPREQ 7
Markus Grabnere1a164d2010-08-23 01:08:25 +020040#define POD_STARTUP_DELAY 1000
41
42/*
43 Stages of POD startup procedure
44*/
45enum {
46 POD_STARTUP_INIT = 1,
Markus Grabnere1a164d2010-08-23 01:08:25 +020047 POD_STARTUP_VERSIONREQ,
48 POD_STARTUP_WORKQUEUE,
49 POD_STARTUP_SETUP,
50 POD_STARTUP_LAST = POD_STARTUP_SETUP - 1
51};
Markus Grabner705ecec2009-02-27 19:43:04 -080052
Markus Grabner705ecec2009-02-27 19:43:04 -080053struct usb_line6_pod {
54 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020055 Generic Line6 USB data.
Markus Grabner705ecec2009-02-27 19:43:04 -080056 */
57 struct usb_line6 line6;
58
59 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020060 Instrument monitor level.
Markus Grabner705ecec2009-02-27 19:43:04 -080061 */
Stefan Hajnoczi2c35dc22012-11-22 20:48:47 +010062 int monitor_level;
Markus Grabner705ecec2009-02-27 19:43:04 -080063
64 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020065 Timer for device initializaton.
Markus Grabner705ecec2009-02-27 19:43:04 -080066 */
Markus Grabner1027f4762010-08-12 01:35:30 +020067 struct timer_list startup_timer;
Markus Grabner705ecec2009-02-27 19:43:04 -080068
69 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020070 Work handler for device initializaton.
71 */
72 struct work_struct startup_work;
73
74 /**
75 Current progress in startup procedure.
76 */
77 int startup_progress;
78
79 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020080 Serial number of device.
Markus Grabner705ecec2009-02-27 19:43:04 -080081 */
82 int serial_number;
83
84 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020085 Firmware version (x 100).
Markus Grabner705ecec2009-02-27 19:43:04 -080086 */
87 int firmware_version;
88
89 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020090 Device ID.
Markus Grabner705ecec2009-02-27 19:43:04 -080091 */
92 int device_id;
Markus Grabner705ecec2009-02-27 19:43:04 -080093};
94
Markus Grabner1027f4762010-08-12 01:35:30 +020095extern void line6_pod_disconnect(struct usb_interface *interface);
Markus Grabnere1a164d2010-08-23 01:08:25 +020096extern int line6_pod_init(struct usb_interface *interface,
97 struct usb_line6_pod *pod);
Markus Grabner1027f4762010-08-12 01:35:30 +020098extern void line6_pod_process_message(struct usb_line6_pod *pod);
99extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
Johannes Thumshirn5b9bd2a2012-06-27 21:25:57 +0200100 u8 value);
Markus Grabner705ecec2009-02-27 19:43:04 -0800101
Markus Grabner705ecec2009-02-27 19:43:04 -0800102#endif