aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-04-22 13:06:46 -0400
committerJeff Garzik <jeff@garzik.org>2007-05-09 20:15:46 -0400
commit48be6b18336567a795bc41e4526f9adfb3a3d68e (patch)
tree41bca21966fe455b96bf4f1cbbe888608fa21d55
parent3cb7396b7b26585b1ab7c1a8ca554ec103da5d37 (diff)
libata-acpi: fix _GTF command protocol for ATAPI devices
_GTF command is never ATA_PROT_ATAPI_NODATA whether the device is ATAPI or not. It's always ATA_PROT_NODATA. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/ata/libata-acpi.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c
index 03a0acff6cfa..cb3eab6e379d 100644
--- a/drivers/ata/libata-acpi.c
+++ b/drivers/ata/libata-acpi.c
@@ -489,8 +489,7 @@ static void taskfile_load_raw(struct ata_port *ap,
489 489
490 /* convert gtf to tf */ 490 /* convert gtf to tf */
491 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */ 491 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */
492 tf.protocol = atadev->class == ATA_DEV_ATAPI ? 492 tf.protocol = ATA_PROT_NODATA;
493 ATA_PROT_ATAPI_NODATA : ATA_PROT_NODATA;
494 tf.feature = gtf->tfa[0]; /* 0x1f1 */ 493 tf.feature = gtf->tfa[0]; /* 0x1f1 */
495 tf.nsect = gtf->tfa[1]; /* 0x1f2 */ 494 tf.nsect = gtf->tfa[1]; /* 0x1f2 */
496 tf.lbal = gtf->tfa[2]; /* 0x1f3 */ 495 tf.lbal = gtf->tfa[2]; /* 0x1f3 */
>{ uint8_t command; /* PYRA_COMMAND_INFO */ uint8_t size; /* always 6 */ uint8_t firmware_version; uint8_t unknown1; /* always 0 */ uint8_t unknown2; /* always 1 */ uint8_t unknown3; /* always 0 */ }; enum pyra_commands { PYRA_COMMAND_CONTROL = 0x4, PYRA_COMMAND_SETTINGS = 0x5, PYRA_COMMAND_PROFILE_SETTINGS = 0x6, PYRA_COMMAND_PROFILE_BUTTONS = 0x7, PYRA_COMMAND_INFO = 0x9, PYRA_COMMAND_B = 0xb }; enum pyra_usb_commands { PYRA_USB_COMMAND_CONTROL = 0x304, PYRA_USB_COMMAND_SETTINGS = 0x305, PYRA_USB_COMMAND_PROFILE_SETTINGS = 0x306, PYRA_USB_COMMAND_PROFILE_BUTTONS = 0x307, PYRA_USB_COMMAND_INFO = 0x309, PYRA_USB_COMMAND_B = 0x30b /* writes 3 bytes */ }; enum pyra_mouse_report_numbers { PYRA_MOUSE_REPORT_NUMBER_HID = 1, PYRA_MOUSE_REPORT_NUMBER_AUDIO = 2, PYRA_MOUSE_REPORT_NUMBER_BUTTON = 3, }; struct pyra_mouse_event_button { uint8_t report_number; /* always 3 */ uint8_t unknown; /* always 0 */ uint8_t type; uint8_t data1; uint8_t data2; }; struct pyra_mouse_event_audio { uint8_t report_number; /* always 2 */ uint8_t type; uint8_t unused; /* always 0 */ }; /* hid audio controls */ enum pyra_mouse_event_audio_types { PYRA_MOUSE_EVENT_AUDIO_TYPE_MUTE = 0xe2, PYRA_MOUSE_EVENT_AUDIO_TYPE_VOLUME_UP = 0xe9, PYRA_MOUSE_EVENT_AUDIO_TYPE_VOLUME_DOWN = 0xea, }; enum pyra_mouse_event_button_types { /* * Mouse sends tilt events on report_number 1 and 3 * Tilt events are sent repeatedly with 0.94s between first and second * event and 0.22s on subsequent */ PYRA_MOUSE_EVENT_BUTTON_TYPE_TILT = 0x10, /* * These are sent sequentially * data1 contains new profile number in range 1-5 */ PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_1 = 0x20, PYRA_MOUSE_EVENT_BUTTON_TYPE_PROFILE_2 = 0x30, /* * data1 = button_number (rmp index) * data2 = pressed/released */ PYRA_MOUSE_EVENT_BUTTON_TYPE_MACRO = 0x40, PYRA_MOUSE_EVENT_BUTTON_TYPE_SHORTCUT = 0x50, /* * data1 = button_number (rmp index) */ PYRA_MOUSE_EVENT_BUTTON_TYPE_QUICKLAUNCH = 0x60, /* data1 = new cpi */ PYRA_MOUSE_EVENT_BUTTON_TYPE_CPI = 0xb0, /* data1 and data2 = new sensitivity */ PYRA_MOUSE_EVENT_BUTTON_TYPE_SENSITIVITY = 0xc0, PYRA_MOUSE_EVENT_BUTTON_TYPE_MULTIMEDIA = 0xf0, }; enum { PYRA_MOUSE_EVENT_BUTTON_PRESS = 0, PYRA_MOUSE_EVENT_BUTTON_RELEASE = 1, }; struct pyra_roccat_report { uint8_t type; uint8_t value; uint8_t key; }; #pragma pack(pop) struct pyra_device { int actual_profile; int actual_cpi; int firmware_version; int roccat_claimed; int chrdev_minor; struct mutex pyra_lock; struct pyra_settings settings; struct pyra_profile_settings profile_settings[5]; struct pyra_profile_buttons profile_buttons[5]; }; #endif