1 /* This was an attempt - ultimately proved pointless - at making a full fledged sysfs interface to the alphatrack */
2 /* won't even compile at present */
4 char *alphatrack_sys_margs;
5 spinlock_t alphatrack_sys_margs_lock;
7 struct alphatrack_attr {
9 ssize_t (*show)(struct device *, char *);
10 ssize_t (*store)(struct device *, const char *, size_t);
13 #define ALPHATRACK_ATTR(name, mode, show, store) \
14 static struct alphatrack_attr alphatrack_attr_##name = __ATTR(name, mode, show, store)
16 /* now a great deal of callback code generation */
18 // FOREACH_LIGHT(show_set_light)
19 // FOREACH_BUTTON(show_set_button)
21 show_set_light(LIGHT_RECORD); show_set_light(LIGHT_EQ); show_set_light(LIGHT_OUT);
22 show_set_light(LIGHT_F2); show_set_light(LIGHT_SEND); show_set_light(LIGHT_IN);
23 show_set_light(LIGHT_F1); show_set_light(LIGHT_PAN); show_set_light(LIGHT_UNDEF1);
24 show_set_light(LIGHT_UNDEF2); show_set_light(LIGHT_SHIFT); show_set_light(LIGHT_TRACKMUTE);
25 show_set_light(LIGHT_TRACKSOLO); show_set_light(LIGHT_TRACKREC); show_set_light(LIGHT_READ);
26 show_set_light(LIGHT_WRITE); show_set_light(LIGHT_ANYSOLO); show_set_light(LIGHT_AUTO);
27 show_set_light(LIGHT_F4); show_set_light(LIGHT_RECORD); show_set_light(LIGHT_WINDOW);
28 show_set_light(LIGHT_PLUGIN); show_set_light(LIGHT_F3); show_set_light(LIGHT_LOOP);
30 show_set_opt(enable); show_set_opt(offline); show_set_opt(compress_fader); show_set_opt(dump_state);
31 show_set_int(fader); show_set_int(event);
34 static ssize_t show_lights(struct device *dev, struct device_attribute *attr, char *buf)
36 struct usb_interface *intf = to_usb_interface(dev);
37 struct usb_alphatrack *t = usb_get_intfdata(intf);
38 return sprintf(buf, "%d\n", t->lights);
41 static ssize_t set_lights(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
43 struct usb_interface *intf = to_usb_interface(dev);
44 struct usb_alphatrack *t = usb_get_intfdata(intf);
45 int temp = simple_strtoul(buf, NULL, 10);
50 static DEVICE_ATTR(value, S_IWUGO | S_IRUGO, show_lights, set_lights);
53 ALPHATRACK_ATTR(LightRecord, 0200, NULL, LightRecord_store);
55 static struct attribute *alphatrack_attrs[] = {
56 &alphatrack_attr_LightRecord.attr,
60 static ssize_t alphatrack_attr_show(struct kobject *kobj, struct attribute *attr,
63 struct device *sdp = container_of(kobj, struct device, kobj);
64 struct alphatrack_attr *a = container_of(attr, struct alphatrack_attr, attr);
65 return a->show ? a->show(sdp, buf) : 0;
68 static ssize_t alphatrack_attr_store(struct kobject *kobj, struct attribute *attr,
69 const char *buf, size_t len)
71 struct device *sdp = container_of(kobj, struct device, kobj);
72 struct alphatrack_attr *a = container_of(attr, struct alphatrack_attr, attr);
73 return a->store ? a->store(sdp, buf, len) : len;
76 static struct sysfs_ops alphatrack_attr_ops = {
77 .show = alphatrack_attr_show,
78 .store = alphatrack_attr_store,
81 static struct kobj_type alphatrack_ktype = {
82 .default_attrs = alphatrack_attrs,
83 .sysfs_ops = &alphatrack_attr_ops,
86 static struct kset alphatrack_kset = {
88 .kobj = {.name = "alphatrack"},
89 .ktype = &alphatrack_ktype,
93 static struct attribute *lights_attrs[] = {
94 &tune_attr_demote_secs.attr,
99 static struct attribute_group leds_group = {
101 .attrs = lights_attrs,
104 static struct attribute_group faders_group = {
106 .attrs = faders_attrs,
109 static struct attribute_group lcds_group = {
114 static struct attribute_group wheels_group = {
116 .attrs = wheels_attrs,
119 static struct attribute_group touchsurfaces_group = {
120 .name = "touchsurfaces",
121 .attrs = touchsurfaces_attrs,
124 static struct attribute_group buttons_group = {
126 .attrs = buttons_attrs,
130 int alphatrack_sys_fs_add(struct device *sdp)
134 sdp->kobj.kset = &alphatrack_kset;
135 sdp->kobj.ktype = &alphatrack_ktype;
137 // error = kobject_set_name(&sdp->kobj, "%s", sdp->sd_table_name);
138 error = kobject_set_name(&sdp->kobj, "%s", "alphatrack");
142 error = kobject_register(&sdp->kobj);
146 error = sysfs_create_group(&sdp->kobj, &lcds_group);
150 error = sysfs_create_group(&sdp->kobj, &leds_group);
154 error = sysfs_create_group(&sdp->kobj, &wheels_group);
158 error = sysfs_create_group(&sdp->kobj, &faders_group);
162 error = sysfs_create_group(&sdp->kobj, &buttons_group);
166 error = sysfs_create_group(&sdp->kobj, &touchsurfaces_group);
174 sysfs_remove_group(&sdp->kobj, &buttons_group);
176 sysfs_remove_group(&sdp->kobj, &faders_group);
178 sysfs_remove_group(&sdp->kobj, &wheels_group);
180 sysfs_remove_group(&sdp->kobj, &lcds_group);
182 sysfs_remove_group(&sdp->kobj, &leds_group);
187 kobject_unregister(&sdp->kobj);
189 fs_err(sdp, "error %d adding sysfs files", error);
193 // int sysfs_create_link(struct kobject *kobj,
194 // struct kobject *target,
197 void alphatrack_sys_fs_del(struct device *sdp)
199 sysfs_remove_group(&sdp->kobj, &touchsurfaces_group);
200 sysfs_remove_group(&sdp->kobj, &buttons_group);
201 sysfs_remove_group(&sdp->kobj, &faders_group);
202 sysfs_remove_group(&sdp->kobj, &lcds_group);
203 sysfs_remove_group(&sdp->kobj, &wheels_group);
204 sysfs_remove_group(&sdp->kobj, &leds_group)
205 //void sysfs_remove_link(struct kobject *kobj, char *name);
206 kobject_unregister(&sdp->kobj);
209 int alphatrack_sys_init(void)
211 alphatrack_sys_margs = NULL;
212 spin_lock_init(&alphatrack_sys_margs_lock);
213 return kset_register(&alphatrack_kset);
216 void alphatrack_sys_uninit(void)
218 kfree(alphatrack_sys_margs);
219 kset_unregister(&alphatrack_kset);
223 //decl_subsys(char *name, struct kobj_type *type,
224 // struct kset_hotplug_ops *hotplug_ops);
226 /* End of all the crazy sysfs stuff */
228 #define SYSEX_INQUIRE signed char *SYSEX_INQUIRE[] = { 0xf0,0x7e,0x00,0x06,0x01,0x17 };
230 #define COMMAND(NAME,CONT_NAME) { BUTTONMASK_##NAME, ((0x90 << 8) | CONT_NAME), ((0x90 << 8) | CONT_NAME), #NAME, NAME ## _set }
231 #define ROTARY(NAME,CONT_NAME) { FADER_##NAME, ((0xb0 << 8) | CONT_NAME), ((0xb0 << 8) | CONT_NAME), #NAME, NAME ## _set }
232 #define SPOSITION(NAME,CONT_NAME) { BUTTON_##NAME ((0xe9 << 8) | CONT_NAME), #NAME, NAME ## _set }
233 #define ENDCOMMAND { 0,NULL,0,NULL,NULL}
235 /* Now that we've generated all our callbacks */
237 static struct buttonmap_t buttonmap[] =
239 COMMAND (REWIND,0x5b),
240 COMMAND (FASTFORWARD,0x5c),
243 COMMAND (RECORD,0x5f),
244 COMMAND (SHIFT,0x46),
245 COMMAND (TRACKLEFT,0x57),
246 COMMAND (TRACKRIGHT,0x58),
259 COMMAND (PLUGIN,0x2b),
261 COMMAND (TRACKREC,0x00),
262 COMMAND (FOOTSWITCH1,0x67),
263 COMMAND (KNOBTOUCH1,0x78),
264 COMMAND (KNOBPUSH1,0x20),
265 ROTARY (KNOBTURN1,0x10),
266 COMMAND (KNOBTOUCH2,0x79),
267 COMMAND (KNOBPUSH2,0x21),
268 ROTARY (KNOBTURN2,0x11),
269 COMMAND (KNOBTOUCH3,0x7a),
270 COMMAND (KNOBPUSH3,0x22),
271 ROTARY (KNOBTURN3,0x12),
272 COMMAND (FADERTOUCH1,0x68),
273 COMMAND (STRIPTOUCH1,0x74),
274 COMMAND (STRIPTOUCH2,0x6b),
275 SPOSITION (STRIPPOS1,0x00),