UBUNTU: Sony laptop: Some Sony Vaia laptops do not enable wwan power by default.
authorTim Gardner <tim.gardner@canonical.com>
Tue, 21 Apr 2009 17:09:10 +0000 (11:09 -0600)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 28 Mar 2011 13:48:12 +0000 (06:48 -0700)
Bug: https://bugs.launchpad.net/bugs/364678

Added quirk to enable wwan power based on DMI information already present in the module.
Ity appears that Vaio's do not enable power to wwan from a cold boot.

Signed-off-by: Tim Gardner <tim.gardner@canonical.com>

drivers/platform/x86/sony-laptop.c

index 5e83370..3d63522 100644 (file)
@@ -1460,6 +1460,10 @@ struct sonypi_eventtypes {
        struct sonypi_event     *events;
 };
 
+struct sony_pic_quirk_entry {
+       u8                              set_wwan_power;
+};
+
 struct sony_pic_dev {
        struct acpi_device              *acpi_dev;
        struct sony_pic_irq             *cur_irq;
@@ -1470,6 +1474,7 @@ struct sony_pic_dev {
        struct sonypi_eventtypes        *event_types;
        int                             (*handle_irq)(const u8, const u8);
        int                             model;
+       struct sony_pic_quirk_entry     *quirks;
        u16                             evport_offset;
        u8                              camera_power;
        u8                              bluetooth_power;
@@ -2901,6 +2906,12 @@ static int sony_pic_add(struct acpi_device *device)
        if (result)
                goto err_remove_pf;
 
+       if (spic_dev.quirks && spic_dev.quirks->set_wwan_power) {
+               /*
+                * Power isn't enabled by default.
+                */
+               __sony_pic_set_wwanpower(1);
+       }
        return 0;
 
 err_remove_pf:
@@ -2971,6 +2982,16 @@ static struct acpi_driver sony_pic_driver = {
                },
 };
 
+static struct sony_pic_quirk_entry sony_pic_vaio_vgn = {
+       .set_wwan_power = 1,
+};
+
+static int dmi_matched(const struct dmi_system_id *dmi)
+{
+       spic_dev.quirks = dmi->driver_data;
+       return 0;
+}
+
 static struct dmi_system_id __initdata sonypi_dmi_table[] = {
        {
                .ident = "Sony Vaio",
@@ -2985,6 +3006,8 @@ static struct dmi_system_id __initdata sonypi_dmi_table[] = {
                        DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
                        DMI_MATCH(DMI_PRODUCT_NAME, "VGN-"),
                },
+               .callback = dmi_matched,
+               .driver_data = &sony_pic_vaio_vgn,
        },
        { }
 };