Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752050AbbH0IYR (ORCPT ); Thu, 27 Aug 2015 04:24:17 -0400 Received: from mail-bn1bon0091.outbound.protection.outlook.com ([157.56.111.91]:63199 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751341AbbH0IYN (ORCPT ); Thu, 27 Aug 2015 04:24:13 -0400 X-Greylist: delayed 751 seconds by postgrey-1.27 at vger.kernel.org; Thu, 27 Aug 2015 04:24:13 EDT Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=amd.com; alien8.de; dkim=none (message not signed) header.d=none;alien8.de; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NTQENI-08-9FF-02 X-M-MSG: From: Huang Rui To: Borislav Petkov , Jean Delvare , "Guenter Roeck" , Andy Lutomirski , "Andreas Herrmann" , Thomas Gleixner , Peter Zijlstra , Ingo Molnar , "Rafael J. Wysocki" , Len Brown , John Stultz , =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Weisbecker?= CC: , , , Andreas Herrmann , Aravind Gopalakrishnan , Borislav Petkov , Fengguang Wu , Aaron Lu , Tony Li , Huang Rui Subject: [PATCH 03/15] hwmon, fam15h_power: refactor attributes for dynamically added Date: Thu, 27 Aug 2015 16:07:34 +0800 Message-ID: <1440662866-28716-4-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1440662866-28716-1-git-send-email-ray.huang@amd.com> References: <1440662866-28716-1-git-send-email-ray.huang@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.222;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(3050300001)(199003)(189002)(5001770100001)(189998001)(97736004)(4001540100001)(48376002)(68736005)(5001830100001)(36756003)(64706001)(50466002)(106466001)(47776003)(62966003)(19580405001)(5001860100001)(86362001)(2950100001)(50226001)(5007970100001)(77156002)(33646002)(105586002)(87936001)(53416004)(101416001)(76176999)(46102003)(19580395003)(50986999)(77096005)(5003940100001)(92566002)(229853001)(5003600100002)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR12MB0708;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0708;2:MFzcipYArW9s9oqbgvCAyvqKDAgwJ+Z2z7/oLi+SvPWC8BUI9A2RfjzACTCkL3B5oloUFaPgsPjmCl4BdpC6y3Sj+rm76wvoyvGZkVcwdnQ0snJwhl4obrS6onsm7mvhLcVgqKfxM9Q05Ke0yiRd2L3QJHx4HRUQH7EY0se1AZw=;3:gBRdHW6SvyyltfgpCKo3we8Tva1hnrPXhsY7HgXva70RFZeGTozZc8ysurZLUd2Q2/vOpx+BkxfBU2oSr7AaZk9W17bMvi6/ZB8UtUSvQN4JgEerQi+VTl1+jGd+HAEgFo0y1oRDOdinBN2Ld1Bge2FAu3nRsy3Wqz632tbK0CR7auxe8o4hOvux8JR7ZNJRCQRNze5aHIMBXyt5NKz9YbGPlKIWYfaxyKUcpsiQV3jfg7oWbgNV5cy/TY9kNiT8;25:w0vAmqEC/Qk76fyP9jQ8lvMu2K9vuhHCu/EwRo0PV+OOlVilBArGKd8FMKMmH6/CYqiL4lTLxDUoLGXdiumh3cqH81bESR7vzdQkJmuaYr/wyY51Y/cOxb6G6nowtGZR6Chztq3CJNwRgXASW0ui79gfFvMt3BLCrtZE9viQaoGLvDspIkiSwJCBHL7UBuCd5E8mcwkvaSsrGz2s+LVQjS9ICrwcSpZt13vQE8FCPoIFfG/QiM4Nv6oZI9mIZH5+ X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0708; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0708;20:+rqqcXFobpiPxGYz0mkjatR7ZtdP9vXp2yoWh2hPWLyxPqOOYX5XyYd6zXDZruz4+B3Hs7w1JfM9/AlWrVpU6FQv3K7TAvDeJ73LSaNIaYkS+2X0NqhkWBYDLwasgXj1VH1ylpLG5N/zWikVyS8LWHZTjMuNVPfqIsV7dfZSh94gVhp8CxMhGSCvtsqvJbv8BAS2sC5Y+DxZs1hUzJhzcVTl51ow/Sp5Rsm2HAO35uXAorAQW3VmqPjXJc7uUHgdNlwT90fGgL+zDw/ZcpHoHx7Ko+XvYx2d1fwxwtuVNhomS/Rhnj9JHtnCQZdMnmewppgP4OiXdK4R69BEWuvScnl1ra7esQCQhLEvx9fSCWRK5PJCChacapZlBmC4bku0iOxppufuX2Izb5ptX6FaxP7q0x6WWJS8qmxzNCv9qbIHD2eHkapMY5YYyjsQDPupZkfs4ISe4VafKRvUJwZ5BQFGdJFqCMX8HIATYy6rE4bigu2TI6NuMACU4rDVof2O;4:XR/Hj15EqTzA0TwY0ann2ymT4DykHq/CVoIJES0ZzlsEnsuMcv2l6o3JmLBafGPBoNualrHAmo1LpdfCqx3YqzNLZAdJgZDu0Cct3Vw7OaCNKwCK9nAgitfnWDMS6Y/HC7zBC1BsZGQuOqlEzPNzqmwTmmUm9D7d5XRWK1rcjcn/w+0TO5QBp1ckqekbgS25I5Z/4KM9Mt7pjEmIS/NI3/5dYljL9rmsHpo4uhlR48+g/zhRJQa4wrULcBuZ5Wax80VUbGaV30s5UvETYBebF4fJiUczSmtm89VHq3BahN24qoQlnaquRVO/noIccsgJ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:BLUPR12MB0708;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0708; X-Forefront-PRVS: 06818431B9 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR12MB0708;23:ZIh5eD4CGm95ejTFhl+CnNUnMM8bcn5VoaE+0WWfH?= =?us-ascii?Q?cnJLKD3vXpuemQ72BE85ZV3vgGFnIFF8lN4imgLYLdpO0yt1hG2T3h4bCf8v?= =?us-ascii?Q?zjRB7HyyB6Nxn4OTcuFB7YZPbREUstOcKKgJS0stk+mX4C/3sGAnIu2VBGey?= =?us-ascii?Q?55Asf8Pc1olmZUxHq5fLoIj2g8pMa3rMFkRKrXwAnd/fr9ceLUeaIGjg+xtf?= =?us-ascii?Q?uCd4lW9QKh0wrJJ9DzEYL8YYZVtcz3qvFrUxfyymUKYpSdPDWQCJwAnYnGBT?= =?us-ascii?Q?bBAzArqN/bzixmk+r37IlWG4bSCXYoZGaYFgqG411Q/nVF+ArPqnAjvoTC05?= =?us-ascii?Q?XSvS1/8oc0zHkUYY1RbNgGoI7dCDpwOuLQuWAuyVRe3ld/17GH2ewKENlVe8?= =?us-ascii?Q?JJgGP7NxLyHqR6Tb56ZjJqH1yJfDBm4/mCdZBde7kZWtxaGJLm87jriNSGhX?= =?us-ascii?Q?LV856Rp56OPG6SmC9yTd+wySxgwZ5A/18Ow3KcmmBTkJtIWbSq1l4XhmMsS2?= =?us-ascii?Q?s/uKyXTb4MYJLcOryTMKJoNaUplmTyL/9CaHTzlrHoJ87CC2S4w/uSMyH+X+?= =?us-ascii?Q?Q0W0evOVqgCk/G5pBd2+3xtb06F41DZ48iDGJFRPZY8Me0sSZ2BWFBksU34R?= =?us-ascii?Q?Or9OYWvZ554rjUZqG16Xvhu86ctNri7pEspGirtqMXRA+tUcoL9EdcJaTvag?= =?us-ascii?Q?27qhZXwvYo4ffP5OyKW9Z9SCACd4/3swDu9dVBVikLcY/WfTEV8bVMuu0r3n?= =?us-ascii?Q?CgsauGIZd86p3U0UIpTTKM7c2ytUxm7ZrmZDxB7Oai/+P2eFmArR+FKqU9L5?= =?us-ascii?Q?3JfAA305StegdFkeQs6W9BhUtiLiGqkyEExXkfj6ZY+nJDtG5+Y70RiANM51?= =?us-ascii?Q?452SUOxqcREprnr+ifp0B4WS/tHj1Kn97vJCvkIFuNIwBVulHYvdAb6SnfyV?= =?us-ascii?Q?USRgMiirdbMTpLs80KLUSF7JVrDOWemWA0DEQwXBfKCN1vymz87K4pKmZ4SK?= =?us-ascii?Q?PRmaWv8ZttXtmT9sHTfsgwv5OJnCRPG7hxknHEQafWANkhSjVwQAhKM+Mbmc?= =?us-ascii?Q?CxuICwMqxy+WKLDmO5SmucdeRJSfGsuiQYakXBATpf6iZJ9DdtPKHCfxgqwC?= =?us-ascii?Q?tr3vpVVxtPa+vVReMHQw99UtfwhaAXW?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0708;5:OXJp+Tnc4LGwf/m0nvbGLxfrx5+M7mxYeAUpKsNRlqLXfQ0EwRHtox8Qq9IQSUTs2/mY188CFxKyVop3+IPP/4PzcqlER/XJ0RsTLAlLL7nCWBPKtnQSneYlfi8OzFKsbLjngQNQV0FZ1QQ5JxUUUw==;24:LruWNug6R2kWFpngiMyGHhzMN49455RZsaj0fBRS7wdh0jy8Mt9yeP7VDEIG5iz+IUnj4xIL/VRejSrkhPm1wilvfy/XSb/UaEkru958U9c=;20:vOZFBS1pP4+k/5l8Yc7PT6ouX+AJQGCXcPuxyPR8esF9Y+Y5GYqKxImOPstIAUbuV17wdlNsfE4MGABJKYLSUQ== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2015 08:09:22.5892 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.222];Helo=[atltwp02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR12MB0708 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2898 Lines: 95 Attributes depend on the CPU model the driver gets loaded on. Therefore, add those attributes dynamically at init time. This is more flexible to control the different attributes on different platforms. Signed-off-by: Huang Rui --- drivers/hwmon/fam15h_power.c | 49 +++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c index 820adf1..65ffb06 100644 --- a/drivers/hwmon/fam15h_power.c +++ b/drivers/hwmon/fam15h_power.c @@ -41,6 +41,8 @@ MODULE_LICENSE("GPL"); #define REG_TDP_RUNNING_AVERAGE 0xe0 #define REG_TDP_LIMIT3 0xe8 +#define FAM15H_MIN_POWER_GROUPS 2 + struct fam15h_power_data { struct pci_dev *pdev; unsigned int tdp_to_watts; @@ -93,29 +95,35 @@ static ssize_t show_power_crit(struct device *dev, } static DEVICE_ATTR(power1_crit, S_IRUGO, show_power_crit, NULL); -static umode_t fam15h_power_is_visible(struct kobject *kobj, - struct attribute *attr, - int index) +static struct attribute_group fam15h_power_group; +__ATTRIBUTE_GROUPS(fam15h_power); + +static int fam15h_power_init_attrs(struct pci_dev *pdev) { - /* power1_input is only reported for Fam15h, Models 00h-0fh */ - if (attr == &dev_attr_power1_input.attr && - (boot_cpu_data.x86 != 0x15 || boot_cpu_data.x86_model > 0xf)) - return 0; + int n = FAM15H_MIN_POWER_GROUPS; + struct attribute **fam15h_power_attrs; - return attr->mode; -} + if (boot_cpu_data.x86 == 0x15 && boot_cpu_data.x86_model <= 0xf) + n += 1; -static struct attribute *fam15h_power_attrs[] = { - &dev_attr_power1_input.attr, - &dev_attr_power1_crit.attr, - NULL -}; + fam15h_power_attrs = devm_kcalloc(&pdev->dev, n, + sizeof(*fam15h_power_attrs), + GFP_KERNEL); -static const struct attribute_group fam15h_power_group = { - .attrs = fam15h_power_attrs, - .is_visible = fam15h_power_is_visible, -}; -__ATTRIBUTE_GROUPS(fam15h_power); + if (!fam15h_power_attrs) { + dev_err(&pdev->dev, "failed to alloc fam15h_power_attrs\n"); + return -ENOMEM; + } + + n = 0; + fam15h_power_attrs[n++] = &dev_attr_power1_crit.attr; + if (boot_cpu_data.x86 == 0x15 && boot_cpu_data.x86_model <= 0xf) + fam15h_power_attrs[n++] = &dev_attr_power1_input.attr; + + fam15h_power_group.attrs = fam15h_power_attrs; + + return 0; +} static bool should_load_on_this_node(struct pci_dev *f4) { @@ -221,6 +229,9 @@ static int fam15h_power_probe(struct pci_dev *pdev, if (!data) return -ENOMEM; + if (fam15h_power_init_attrs(pdev)) + return -ENOMEM; + fam15h_power_init_data(pdev, data); data->pdev = pdev; -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/