blob: 0d78ca76a72f2737e0fec77aaee0b0d48e202a9a [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/*
Markus Grabner705ecec2009-02-27 19:43:04 -080024 Locate name in binary program dump
25*/
26#define POD_NAME_OFFSET 0
27#define POD_NAME_LENGTH 16
28
29/*
30 Other constants
31*/
32#define POD_CONTROL_SIZE 0x80
33#define POD_BUFSIZE_DUMPREQ 7
Markus Grabnere1a164d2010-08-23 01:08:25 +020034#define POD_STARTUP_DELAY 1000
35
36/*
37 Stages of POD startup procedure
38*/
39enum {
40 POD_STARTUP_INIT = 1,
Markus Grabnere1a164d2010-08-23 01:08:25 +020041 POD_STARTUP_VERSIONREQ,
42 POD_STARTUP_WORKQUEUE,
43 POD_STARTUP_SETUP,
44 POD_STARTUP_LAST = POD_STARTUP_SETUP - 1
45};
Markus Grabner705ecec2009-02-27 19:43:04 -080046
Markus Grabner705ecec2009-02-27 19:43:04 -080047struct usb_line6_pod {
48 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020049 Generic Line6 USB data.
Markus Grabner705ecec2009-02-27 19:43:04 -080050 */
51 struct usb_line6 line6;
52
53 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020054 Instrument monitor level.
Markus Grabner705ecec2009-02-27 19:43:04 -080055 */
Stefan Hajnoczi2c35dc22012-11-22 20:48:47 +010056 int monitor_level;
Markus Grabner705ecec2009-02-27 19:43:04 -080057
58 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020059 Timer for device initializaton.
Markus Grabner705ecec2009-02-27 19:43:04 -080060 */
Markus Grabner1027f4762010-08-12 01:35:30 +020061 struct timer_list startup_timer;
Markus Grabner705ecec2009-02-27 19:43:04 -080062
63 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020064 Work handler for device initializaton.
65 */
66 struct work_struct startup_work;
67
68 /**
69 Current progress in startup procedure.
70 */
71 int startup_progress;
72
73 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020074 Serial number of device.
Markus Grabner705ecec2009-02-27 19:43:04 -080075 */
76 int serial_number;
77
78 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020079 Firmware version (x 100).
Markus Grabner705ecec2009-02-27 19:43:04 -080080 */
81 int firmware_version;
82
83 /**
Markus Grabner1027f4762010-08-12 01:35:30 +020084 Device ID.
Markus Grabner705ecec2009-02-27 19:43:04 -080085 */
86 int device_id;
Markus Grabner705ecec2009-02-27 19:43:04 -080087};
88
Markus Grabner1027f4762010-08-12 01:35:30 +020089extern void line6_pod_disconnect(struct usb_interface *interface);
Markus Grabnere1a164d2010-08-23 01:08:25 +020090extern int line6_pod_init(struct usb_interface *interface,
Chris Rorvicka221dd42015-01-12 12:42:56 -080091 struct usb_line6 *line6);
Markus Grabner705ecec2009-02-27 19:43:04 -080092
Markus Grabner705ecec2009-02-27 19:43:04 -080093#endif