Re: [Fwd: Re: A problem about acer-wmi]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Joey,

Sure, I will.
But my patch depends on your patches,
so I'm not sure if I should send it out now before the acceptation of
your patches.

Best regards,
AceLan Kao.

2011/8/11 Joey Lee <jlee@xxxxxxxxxx>:
> Hi AceLan,
>
> 於 四,2011-08-11 於 15:45 +0800,AceLan Kao 提到:
>> Dear Joey,
>>
>> Good, that looks more reasonable to me.
>>
>> Yes, my machine has wifi module on it, but the wifi hotkey event is
>> handled by BIOS, so the wifi toggle works as expected.
>> I still got the failed message, but we can take it as a BIOS bug and
>> leave it there.
>>
>> BTW, your patches work well on my machine, thanks for your hard work.
>> You can have my signature on your patches.
>> Tested-by: AceLan Kao <acelan.kao@xxxxxxxxxxxxx>
>>
>> Best regards,
>> AceLan Kao.
>
> It's good news!
>
> Will you contribute any patches to acer-wmi for support any function
> keys on your Acer Aspire 4739Z?
>
>
> Thank's
> Joey Lee
>
>> 2011/8/11 Joey Lee <jlee@xxxxxxxxxx>:
>> > 於 四,2011-08-11 於 03:30 +0000,joeyli(Joey Lee) 提到:
>> >> 於 四,2011-08-11 於 10:48 +0800,AceLan Kao 提到:
>> >> > Dear Joey,
>> >> >
>> >> > This is the dmesg log.
>> >> > [ 9010.944053] acer_wmi: Acer Laptop ACPI-WMI Extras
>> >> > [ 9010.944071] acer_wmi: Function bitmap for Communication Button: 0x1
>> >
>> > Per this log, the 0x1 means your machine have wifi hardware module and
>> > BIOS detected it then write information to SMBIOS area.
>> >
>> >> > [ 9010.944075] acer_wmi: Brightness must be controlled by generic video driver
>> >> > [ 9010.944996] input: Acer WMI hotkeys as /devices/virtual/input/input21
>> >> > [ 9010.947095] acer_wmi: Set Device Status failed: 0xe2 - 0x0
>> >> >
>> >
>> > But,
>> > here have problem when acer-wmi driver try to set the state by
>> > WMID_GUID3 method, the wmi function response 0xe2.
>> >
>> >> > And after adding my quirk, the set device status still failed, but
>> >> > except that, everything works well.
>> >> >
>> >>
>> >> So, you machine have wifi hardware module or not?
>> >>
>> >> > The "failed" comes from acer_rfkill_init(), it'll call
>> >> > acer_rfkill_register() with ACER_CAP_WIRELESS parameter without
>> >> > checking the capability.
>> >> > I don't know why only wifi doesn't check the capability and call
>> >> > acer_rfkill_register() directly, but it doesn't hurt the system.
>> >> >
>> >> > ===
>> >> > static int acer_rfkill_init(struct device *dev)
>> >> > {
>> >> >         wireless_rfkill = acer_rfkill_register(dev, RFKILL_TYPE_WLAN,
>> >> >                 "acer-wireless", ACER_CAP_WIRELESS);
>> >> >         if (IS_ERR(wireless_rfkill))
>> >> >                 return PTR_ERR(wireless_rfkill);
>> >> > ===
>> >> >
>> >> > Best regards,
>> >> > AceLan Kao.
>> >> >
>> >>
>> >> I checked the history, looks like it's just a original design in old
>> >> patch.
>> >>
>> >> Yes, you are right, add ACER_CAP_WIRELESS check is better. I am doing
>> >> generate a patch to add ACER_CAP_WIRELESS check.
>> >> Will attached patch on mail.
>> >>
>> >>
>> >> Thank's
>> >> Joey Lee
>> >>
>> >
>> > Please let me know does there have any wifi module in your machine when
>> > you test?
>> > If yes, then you need contact with BIOS team for why the WMID_GUID3
>> > method response 0xe2 when set device state, because this function works
>> > find on my TravelMate 8572 machine.
>> >
>> > On the other hand,
>> > The following is patch to check the ACER_CAP_WIRELESS before generate
>> > wireless rfkill.
>> >
>> >
>> > Thank's
>> > Joey Lee
>> >
>> > >From 18c20f2b40bc64ec72b52ae2e4d994237173f982 Mon Sep 17 00:00:00 2001
>> > From: Lee, Chun-Yi <jlee@xxxxxxxx>
>> > Date: Thu, 11 Aug 2011 12:49:53 +0800
>> > Subject: [PATCH] acer-wmi: check wireless capability flag before register rfkill
>> >
>> > There will be better to check the wireless capability flag
>> > (ACER_CAP_WIRELESS) before register wireless rfkill because maybe
>> > the machine doesn't have wifi module or the module removed by user.
>> >
>> > Signed-off-by: Lee, Chun-Yi <jlee@xxxxxxxx>
>> > ---
>> >  drivers/platform/x86/acer-wmi.c |   64 +++++++++++++++++++++++++-------------
>> >  1 files changed, 42 insertions(+), 22 deletions(-)
>> >
>> > diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
>> > index 712a505..b4078c4 100644> > @@ -1289,12 +1289,13 @@ static void acer_rfkill_update(struct work_struct *ignored)
>> >        u32 state;
>> >        acpi_status status;
>> >
>> > -       status = get_u32(&state, ACER_CAP_WIRELESS);
>> > -       if (ACPI_SUCCESS(status)) {
>> > -               if (quirks->wireless == 3) {
>> > -                       rfkill_set_hw_state(wireless_rfkill, !state);
>> > -               } else {
>> > -                       rfkill_set_sw_state(wireless_rfkill, !state);
>> > +       if (has_cap(ACER_CAP_WIRELESS)) {
>> > +               status = get_u32(&state, ACER_CAP_WIRELESS);
>> > +               if (ACPI_SUCCESS(status)) {
>> > +                       if (quirks->wireless == 3)
>> > +                               rfkill_set_hw_state(wireless_rfkill, !state);
>> > +                       else
>> > +                               rfkill_set_sw_state(wireless_rfkill, !state);
>> >                }
>> >        }
>> >
>> > @@ -1362,19 +1363,24 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
>> >
>> >  static int acer_rfkill_init(struct device *dev)
>> >  {
>> > -       wireless_rfkill = acer_rfkill_register(dev, RFKILL_TYPE_WLAN,
>> > -               "acer-wireless", ACER_CAP_WIRELESS);
>> > -       if (IS_ERR(wireless_rfkill))
>> > -               return PTR_ERR(wireless_rfkill);
>> > +       int err;
>> > +
>> > +       if (has_cap(ACER_CAP_WIRELESS)) {
>> > +               wireless_rfkill = acer_rfkill_register(dev, RFKILL_TYPE_WLAN,
>> > +                       "acer-wireless", ACER_CAP_WIRELESS);
>> > +               if (IS_ERR(wireless_rfkill)) {
>> > +                       err = PTR_ERR(wireless_rfkill);
>> > +                       goto error_wireless;
>> > +               }
>> > +       }
>> >
>> >        if (has_cap(ACER_CAP_BLUETOOTH)) {
>> >                bluetooth_rfkill = acer_rfkill_register(dev,
>> >                        RFKILL_TYPE_BLUETOOTH, "acer-bluetooth",
>> >                        ACER_CAP_BLUETOOTH);
>> >                if (IS_ERR(bluetooth_rfkill)) {
>> > -                       rfkill_unregister(wireless_rfkill);
>> > -                       rfkill_destroy(wireless_rfkill);
>> > -                       return PTR_ERR(bluetooth_rfkill);
>> > +                       err = PTR_ERR(bluetooth_rfkill);
>> > +                       goto error_bluetooth;
>> >                }
>> >        }
>> >
>> > @@ -1383,30 +1389,44 @@ static int acer_rfkill_init(struct device *dev)
>> >                        RFKILL_TYPE_WWAN, "acer-threeg",
>> >                        ACER_CAP_THREEG);
>> >                if (IS_ERR(threeg_rfkill)) {
>> > -                       rfkill_unregister(wireless_rfkill);
>> > -                       rfkill_destroy(wireless_rfkill);
>> > -                       rfkill_unregister(bluetooth_rfkill);
>> > -                       rfkill_destroy(bluetooth_rfkill);
>> > -                       return PTR_ERR(threeg_rfkill);
>> > +                       err = PTR_ERR(threeg_rfkill);
>> > +                       goto error_threeg;
>> >                }
>> >        }
>> >
>> >        rfkill_inited = true;
>> >
>> > -       if (ec_raw_mode || !wmi_has_guid(ACERWMID_EVENT_GUID))
>> > +       if ((ec_raw_mode || !wmi_has_guid(ACERWMID_EVENT_GUID)) &&
>> > +           has_cap(ACER_CAP_WIRELESS | ACER_CAP_BLUETOOTH | ACER_CAP_THREEG))
>> >                schedule_delayed_work(&acer_rfkill_work,
>> >                        round_jiffies_relative(HZ));
>> >
>> >        return 0;
>> > +
>> > +error_threeg:
>> > +       if (has_cap(ACER_CAP_BLUETOOTH)) {
>> > +               rfkill_unregister(bluetooth_rfkill);
>> > +               rfkill_destroy(bluetooth_rfkill);
>> > +       }
>> > +error_bluetooth:
>> > +       if (has_cap(ACER_CAP_WIRELESS)) {
>> > +               rfkill_unregister(wireless_rfkill);
>> > +               rfkill_destroy(wireless_rfkill);
>> > +       }
>> > +error_wireless:
>> > +       return err;
>> >  }
>> >
>> >  static void acer_rfkill_exit(void)
>> >  {
>> > -       if (ec_raw_mode || !wmi_has_guid(ACERWMID_EVENT_GUID))
>> > +       if ((ec_raw_mode |> > +           has_cap(ACER_CAP_WIRELESS | ACER_CAP_BLUETOOTH | ACER_CAP_THREEG))
>> >                cancel_delayed_work_sync(&acer_rfkill_work);
>> >
>> > -       rfkill_unregister(wireless_rfkill);
>> > -       rfkill_destroy(wireless_rfkill);
>> > +       if (has_cap(ACER_CAP_WIRELESS)) {
>> > +               rfkill_unregister(wireless_rfkill);
>> > +               rfkill_destroy(wireless_rfkill);
>> > +       }
>> >
>> >        if (has_cap(ACER_CAP_BLUETOOTH)) {
>> >                rfkill_unregister(bluetooth_rfkill);
>> > --
>> > 1.6.0.2
>> >
>> >
>> >
>> >
>>
>>
>>
>
>
>



-- 
Chia-Lin Kao(AceLan)
http://blog.acelan.idv.tw/
E-Mail: acelan.kaoATcanonical.com (s/AT/@/)
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux