lkml.org 
[lkml]   [2010]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/3] HID: Enable Sixaxis controller over Bluetooth
    From: Bastien Nocera <hadess@hadess.net>

    Now that hid_output_raw_report works, port the PS3 Sixaxis
    Bluetooth quirk from user-space, into kernel-space.

    Signed-off-by: Bastien Nocera <hadess@hadess.net>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    ---
    drivers/hid/hid-core.c | 1 +
    drivers/hid/hid-sony.c | 15 ++++++++++++++-
    2 files changed, 15 insertions(+), 1 deletions(-)

    diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
    index eabe5f8..f7f80e1 100644
    --- a/drivers/hid/hid-core.c
    +++ b/drivers/hid/hid-core.c
    @@ -1340,6 +1340,7 @@ static const struct hid_device_id hid_blacklist[] = {
    { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
    { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
    { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
    + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
    { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
    { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
    { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
    diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
    index 4e84502..08b7fa0 100644
    --- a/drivers/hid/hid-sony.c
    +++ b/drivers/hid/hid-sony.c
    @@ -73,6 +73,12 @@ static int sony_set_operational(struct hid_device *hdev)
    return ret;
    }

    +static int sony_set_operational_bt(struct hid_device *hdev)
    +{
    + unsigned char buf[] = { 0x53, 0xf4, 0x42, 0x03, 0x00, 0x00 };
    + return hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
    +}
    +
    static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
    {
    int ret;
    @@ -101,7 +107,13 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
    goto err_free;
    }

    - ret = sony_set_operational(hdev);
    + if (hdev->bus == BUS_USB)
    + ret = sony_set_operational(hdev);
    + else if (hdev->bus == BUS_BLUETOOTH)
    + ret = sony_set_operational_bt(hdev);
    + else
    + ret = 0;
    +
    if (ret < 0)
    goto err_stop;

    @@ -121,6 +133,7 @@ static void sony_remove(struct hid_device *hdev)

    static const struct hid_device_id sony_devices[] = {
    { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
    + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
    { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
    .driver_data = VAIO_RDESC_CONSTANT },
    { }
    --
    1.6.4.2


    \
     
     \ /
      Last update: 2010-02-03 13:53    [W:0.022 / U:93.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site