All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Mack <daniel@zonque.org>
To: Matt Ranostay <mranostay@gmail.com>,
	galak@codeaurora.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org, dmitry.torokhov@gmail.com,
	robh+dt@kernel.org
Cc: devicetree@vger.kernel.org
Subject: Re: [PATCH 1/3] cap1106: Add support for various cap11xx devices
Date: Sun, 21 Sep 2014 11:58:33 +0200	[thread overview]
Message-ID: <541EA149.5000408@zonque.org> (raw)
In-Reply-To: <1411268469-21283-2-git-send-email-mranostay@gmail.com>

Hi,

On 09/21/2014 05:01 AM, Matt Ranostay wrote:
> Several other variants of the cap11xx device exists with a varying
> number of capacitance detection channels. Add support for creating
> the channels dynamically.

Thanks for the patches!

> 
> Signed-off-by: Matt Ranostay <mranostay@gmail.com>
> ---
>  drivers/input/keyboard/cap1106.c | 54 +++++++++++++++++++---------------------

Please also add a patch to rename the file to cap11xx.c, and make sure
to export the patch with 'git format-patch -M' to detect the rename.

> diff --git a/drivers/input/keyboard/cap1106.c b/drivers/input/keyboard/cap1106.c
> index d70b65a..b9c43b5 100644
> --- a/drivers/input/keyboard/cap1106.c
> +++ b/drivers/input/keyboard/cap1106.c
> @@ -55,8 +55,6 @@
>  #define CAP1106_REG_MANUFACTURER_ID	0xfe
>  #define CAP1106_REG_REVISION		0xff
>  
> -#define CAP1106_NUM_CHN 6
> -#define CAP1106_PRODUCT_ID	0x55
>  #define CAP1106_MANUFACTURER_ID	0x5d
>  
>  struct cap1106_priv {
> @@ -64,7 +62,8 @@ struct cap1106_priv {
>  	struct input_dev *idev;
>  
>  	/* config */
> -	unsigned short keycodes[CAP1106_NUM_CHN];
> +	u32 *keycodes;

unsigned short *, please. See below.

> @@ -189,27 +188,23 @@ static int cap1106_i2c_probe(struct i2c_client *i2c_client,
>  	struct cap1106_priv *priv;
>  	struct device_node *node;
>  	int i, error, irq, gain = 0;
> -	unsigned int val, rev;
> -	u32 gain32, keycodes[CAP1106_NUM_CHN];
> +	unsigned int val, prod, rev;
> +	u32 gain32;
>  
>  	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
>  	if (!priv)
>  		return -ENOMEM;
>  
> +	priv->num_channels = (unsigned long) id->driver_data;

priv->num_channels is unsigned int.

Also, a BUG_ON(!priv->num_channels) wouldn't harm.

> +	priv->keycodes = devm_kzalloc(dev,
> +		sizeof(u32) * priv->num_channels, GFP_KERNEL);

Use devm_kcalloc() to allocate an array.

> @@ -235,17 +234,12 @@ static int cap1106_i2c_probe(struct i2c_client *i2c_client,
>  			dev_err(dev, "Invalid sensor-gain value %d\n", gain32);
>  	}
>  
> -	BUILD_BUG_ON(ARRAY_SIZE(keycodes) != ARRAY_SIZE(priv->keycodes));
> -
>  	/* Provide some useful defaults */
> -	for (i = 0; i < ARRAY_SIZE(keycodes); i++)
> -		keycodes[i] = KEY_A + i;
> +	for (i = 0; i < priv->num_channels; i++)
> +		priv->keycodes[i] = KEY_A + i;
>  
>  	of_property_read_u32_array(node, "linux,keycodes",
> -				   keycodes, ARRAY_SIZE(keycodes));
> -
> -	for (i = 0; i < ARRAY_SIZE(keycodes); i++)
> -		priv->keycodes[i] = keycodes[i];
> +				  priv->keycodes, priv->num_channels);

Hmm, no. Internally, you have to store the keycodes as unsigned short,
otherwise EVIOC{G|S}KEYCODE from usespace doesn't work.

of_property_read_u16_array() should work here for unsigned short, I
guess. Otherwise, you'd have to open-code the routine.

> @@ -313,12 +307,16 @@ static int cap1106_i2c_probe(struct i2c_client *i2c_client,
>  
>  static const struct of_device_id cap1106_dt_ids[] = {
>  	{ .compatible = "microchip,cap1106", },
> +	{ .compatible = "microchip,cap1126", },
> +	{ .compatible = "microchip,cap1188", },

Hmm, how can that work unless you set .data to the number of channels
here? Did you test that with a DT-enabled board?


Thanks,
Daniel

  reply	other threads:[~2014-09-21  9:58 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-21  3:01 [PATCH 0/3] cap1106: add support for cap11xx variants Matt Ranostay
2014-09-21  3:01 ` Matt Ranostay
2014-09-21  3:01 ` [PATCH 1/3] cap1106: Add support for various cap11xx devices Matt Ranostay
2014-09-21  9:58   ` Daniel Mack [this message]
     [not found]     ` <541EA149.5000408-cYrQPVfZoowdnm+yROfE0A@public.gmane.org>
2014-09-21 22:46       ` Matt Ranostay
2014-09-21 22:46         ` Matt Ranostay
2014-09-22  7:36         ` Daniel Mack
2014-09-22  0:28     ` Matt Ranostay
2014-09-22  5:59       ` Dmitry Torokhov
2014-09-21 10:53   ` Daniel Mack
2014-09-21  3:01 ` [PATCH 2/3] cap1106: support for active-high interrupt option Matt Ranostay
2014-09-21 10:06   ` Daniel Mack
2014-09-22  5:56     ` Dmitry Torokhov
2014-09-22  7:44       ` Daniel Mack
2014-09-21  3:01 ` [PATCH 3/3] dt: cap1106 active-high property addition Matt Ranostay

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=541EA149.5000408@zonque.org \
    --to=daniel@zonque.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=galak@codeaurora.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mranostay@gmail.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.