From patchwork Wed Aug 18 08:38:03 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ike Panhc X-Patchwork-Id: 120101 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o7I8cHWY019092 for ; Wed, 18 Aug 2010 08:38:17 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752131Ab0HRIiL (ORCPT ); Wed, 18 Aug 2010 04:38:11 -0400 Received: from adelie.canonical.com ([91.189.90.139]:51501 "EHLO adelie.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751177Ab0HRIiJ (ORCPT ); Wed, 18 Aug 2010 04:38:09 -0400 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1Ole9w-0005IC-Sn; Wed, 18 Aug 2010 09:38:08 +0100 Received: from [210.242.151.101] (helo=canonical.com) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.69) (envelope-from ) id 1Ole9v-00016m-Uu; Wed, 18 Aug 2010 09:38:08 +0100 From: Ike Panhc To: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org Cc: Thomas Renninger , Alan Cox , Andrew Morton , Corentin Chary , David Woodhouse , Randy Dunlap , Len Brown , Matthew Garrett Subject: [PATCH 4/8] ideapad: use return value of _CFG to tell if device exist or not Date: Wed, 18 Aug 2010 16:38:03 +0800 Message-Id: <1282120683-11469-1-git-send-email-ike.pan@canonical.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1282120564-11324-1-git-send-email-ike.pan@canonical.com> References: <1282120564-11324-1-git-send-email-ike.pan@canonical.com> Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Wed, 18 Aug 2010 08:38:18 +0000 (UTC) diff --git a/drivers/platform/x86/ideapad_acpi.c b/drivers/platform/x86/ideapad_acpi.c index c1eec70..673b44d 100644 --- a/drivers/platform/x86/ideapad_acpi.c +++ b/drivers/platform/x86/ideapad_acpi.c @@ -40,13 +40,14 @@ struct ideapad_private { static struct { char *name; + int cfgbit; int type; } ideapad_rfk_data[] = { - /* camera has no rfkill */ - { "ideapad_wlan", RFKILL_TYPE_WLAN }, - { "ideapad_bluetooth", RFKILL_TYPE_BLUETOOTH }, - { "ideapad_3g", RFKILL_TYPE_WWAN }, - { "ideapad_killsw", RFKILL_TYPE_WLAN } + { "ideapad_camera", 19, NUM_RFKILL_TYPES }, + { "ideapad_wlan", 18, RFKILL_TYPE_WLAN }, + { "ideapad_bluetooth", 16, RFKILL_TYPE_BLUETOOTH }, + { "ideapad_3g", 17, RFKILL_TYPE_WWAN }, + { "ideapad_killsw", 0, RFKILL_TYPE_WLAN } }; /* @@ -160,32 +161,6 @@ static int write_ec_cmd(acpi_handle handle, int cmd, unsigned long data) } /* the above is ACPI helpers */ -static int ideapad_dev_exists(int device) -{ - acpi_status status; - union acpi_object in_param; - struct acpi_object_list input = { 1, &in_param }; - struct acpi_buffer output; - union acpi_object out_obj; - - output.length = sizeof(out_obj); - output.pointer = &out_obj; - - in_param.type = ACPI_TYPE_INTEGER; - in_param.integer.value = device + 1; - - status = acpi_evaluate_object(NULL, "\\_SB_.DECN", &input, &output); - if (ACPI_FAILURE(status)) { - printk(KERN_WARNING "IdeaPAD \\_SB_.DECN method failed %d. Is this an IdeaPAD?\n", status); - return -ENODEV; - } - if (out_obj.type != ACPI_TYPE_INTEGER) { - printk(KERN_WARNING "IdeaPAD \\_SB_.DECN method returned unexpected type\n"); - return -ENODEV; - } - return out_obj.integer.value; -} - static int ideapad_dev_get_state(int device) { acpi_status status; @@ -341,9 +316,10 @@ static int ideapad_acpi_add(struct acpi_device *adevice) return -ENODEV; for (i = IDEAPAD_DEV_CAMERA; i < IDEAPAD_DEV_KILLSW; i++) { - devs_present[i] = ideapad_dev_exists(i); - if (devs_present[i] < 0) - return devs_present[i]; + if (test_bit(ideapad_rfk_data[i].cfgbit, (unsigned long *)&cfg)) + devs_present[i] = 1; + else + devs_present[i] = 0; } /* The hardware switch is always present */