From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756188Ab0IWThv (ORCPT ); Thu, 23 Sep 2010 15:37:51 -0400 Received: from cantor2.suse.de ([195.135.220.15]:43141 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756023Ab0IWThu (ORCPT ); Thu, 23 Sep 2010 15:37:50 -0400 Date: Thu, 23 Sep 2010 21:37:48 +0200 Message-ID: From: Takashi Iwai To: Andrew Morton Cc: =?UTF-8?B?w4lyaWM=?= Piel , linux-kernel@vger.kernel.org Subject: Re: [PATCH resent] lis3: Add axes module parameter for custom axis-mapping In-Reply-To: <20100923122308.49c64e37.akpm@linux-foundation.org> References: <20100923122308.49c64e37.akpm@linux-foundation.org> User-Agent: Wanderlust/2.15.6 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.7 Emacs/23.1 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At Thu, 23 Sep 2010 12:23:08 -0700, Andrew Morton wrote: > > On Wed, 22 Sep 2010 13:31:19 +0200 > Takashi Iwai wrote: > > > The axis-mapping of lis3dev device on many (rather most) HP machines > > doesn't follow the standard. When each new model appears, users need > > to adjust again. Testing this requires the rebuild of kernel, thus > > it's not trivial for end-users. > > > > This patch adds a module parameter "axes" to allow a custom > > axis-mapping without patching and recompiling the kernel driver. > > User can pass the parameter such as axes=3,2,1. Also it can be > > changed via sysfs. > > Is the sysfs interface documented anywhere? It's the generic module parameters sysfs interface. > > --- a/drivers/hwmon/hp_accel.c > > +++ b/drivers/hwmon/hp_accel.c > > @@ -146,7 +146,8 @@ int lis3lv02d_acpi_write(struct lis3lv02d *lis3, int reg, u8 val) > > > > static int lis3lv02d_dmi_matched(const struct dmi_system_id *dmi) > > { > > - lis3_dev.ac = *((struct axis_conversion *)dmi->driver_data); > > + memcpy(lis3_dev.axis_map, (int *)dmi->driver_data, > > + sizeof(lis3_dev.axis_map)); > > It's unobvious why the (nice) three-member struct was converted to a > (nasty) three-element array? All those typesafe struct assignments > were turned into non-typesafe memcpys? > > > +module_param_array_named(axes, lis3_dev.axis_map, axis, NULL, 0644); > > Just to support module_param_array_named()? Yes, indeed. > If so, could have used a union? > > union axis_conversion { /* should be called lis3_axis_conversion! */ > struct { > int x; > int y; > int z; > }; > int as_array[3]; > }; This should be possible, yes. > or use a tyecast in the module_param_array_named() statement, perhaps? Using non-array for module parameter would become tricky like my first version. I'll try to rewrite with the union expression. thanks, Takashi