All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Vishnu Reddy" <vishnu.reddy@samsung.com>
To: "'Alim Akhtar'" <alim.akhtar@samsung.com>, <krzk@kernel.org>,
	<s.nawrocki@samsung.com>, <linus.walleij@linaro.org>
Cc: <linux-arm-kernel@lists.infradead.org>,
	<linux-samsung-soc@vger.kernel.org>, <linux-gpio@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <pankaj.dubey@samsung.com>,
	<ravi.patel@samsung.com>
Subject: RE: [PATCH] pinctrl: samsung: Add support for pull-up and pull-down
Date: Thu, 6 Jun 2024 10:41:55 +0530	[thread overview]
Message-ID: <0c5101dab7d0$0de1bfb0$29a53f10$@samsung.com> (raw)
In-Reply-To: <002601dab23c$559263d0$00b72b70$@samsung.com>

Hi Alim, Thank you for reviewing the patch.

> -----Original Message-----
> From: Alim Akhtar [mailto:alim.akhtar@samsung.com]
> Sent: 30 May 2024 08:22
> To: 'Vishnu Reddy' <vishnu.reddy@samsung.com>; krzk@kernel.org;
> s.nawrocki@samsung.com; linus.walleij@linaro.org
> Cc: linux-arm-kernel@lists.infradead.org; linux-samsung-
> soc@vger.kernel.org; linux-gpio@vger.kernel.org; linux-
> kernel@vger.kernel.org; pankaj.dubey@samsung.com;
> ravi.patel@samsung.com
> Subject: RE: [PATCH] pinctrl: samsung: Add support for pull-up and pull-down
> 
> Hi Vishnu,
> 
> > -----Original Message-----
> > From: Vishnu Reddy <vishnu.reddy@samsung.com>
> > Sent: Wednesday, May 29, 2024 12:30 PM
> > To: krzk@kernel.org; s.nawrocki@samsung.com;
> alim.akhtar@samsung.com;
> > linus.walleij@linaro.org
> > Cc: linux-arm-kernel@lists.infradead.org;
> > linux-samsung-soc@vger.kernel.org;
> > linux-gpio@vger.kernel.org; linux-kernel@vger.kernel.org;
> > pankaj.dubey@samsung.com; ravi.patel@samsung.com
> > Subject: [PATCH] pinctrl: samsung: Add support for pull-up and
> > pull-down
> >
> > gpiolib framework has the implementation of setting up the PUD
> > configuration for GPIO pins but there is no driver support.
> >
> > Add support to handle the PUD configuration request from the userspace
> > in samsung pinctrl driver.
> >
> > Signed-off-by: Vishnu Reddy <vishnu.reddy@samsung.com>
> > ---
> >  drivers/pinctrl/samsung/pinctrl-samsung.c | 51
> > +++++++++++++++++++++++ drivers/pinctrl/samsung/pinctrl-samsung.h |
> 7
> > ++++
> >  2 files changed, 58 insertions(+)
> >
> > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c
> > b/drivers/pinctrl/samsung/pinctrl-samsung.c
> > index ed07e23e0912..a4b6eea5e168 100644
> > --- a/drivers/pinctrl/samsung/pinctrl-samsung.c
> > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c
> > @@ -939,6 +939,56 @@ static int samsung_pinctrl_unregister(struct
> > platform_device *pdev,
> >  	return 0;
> >  }
> >
> > +/*
> > + * samsung_gpio_set_pud will enable or disable the pull-down and
> > + * pull-up for the gpio pins in the PUD register.
> > + */
> > +static void samsung_gpio_set_pud(struct gpio_chip *gc, unsigned int
> offset,
> > +				 unsigned int value)
> > +{
> > +	struct samsung_pin_bank *bank = gpiochip_get_data(gc);
> > +	const struct samsung_pin_bank_type *type = bank->type;
> > +	void __iomem *reg;
> > +	unsigned int data;
> > +
> > +	reg = bank->pctl_base + bank->pctl_offset;
> > +	data = readl(reg + type->reg_offset[PINCFG_TYPE_PUD]);
> > +	data &= ~(0xf << (offset * 4));
> For the mask, you can use "type->fld_width" as that is more generic and will
> work for all SoC I didn’t get, why you are multiplying offset with 4? Is this true
> for all SoC?
Ack, Will update.
> 
> > +	data |= value << (offset * 4);
> > +	writel(data, reg + type->reg_offset[PINCFG_TYPE_PUD]);
> > +}
> > +
> > +/*
> > + * samsung_gpio_set_config will identify the type of PUD config based
> > + * on the gpiolib request to enable or disable the PUD configuration.
> > + */
> > +static int samsung_gpio_set_config(struct gpio_chip *gc, unsigned int
> offset,
> > +				   unsigned long config)
> > +{
> > +	struct samsung_pin_bank *bank = gpiochip_get_data(gc);
> > +	unsigned long flags;
> > +	unsigned int value = 0;
> > +
> > +	switch (pinconf_to_config_param(config)) {
> > +	case PIN_CONFIG_BIAS_DISABLE:
> > +		value = DISABLE_PIN_PULL_UP_DOWN;
> > +		break;
> > +	case PIN_CONFIG_BIAS_PULL_DOWN:
> > +		value = ENABLE_PIN_PULL_DOWN;
> > +		break;
> > +	case PIN_CONFIG_BIAS_PULL_UP:
> > +		value = ENABLE_PIN_PULL_UP;
> > +		break;
> > +	default:
> > +		return -ENOTSUPP;
> > +	}
> > +
> > +	raw_spin_lock_irqsave(&bank->slock, flags);
> > +	samsung_gpio_set_pud(gc, offset, value);
> > +	raw_spin_unlock_irqrestore(&bank->slock, flags);
> > +	return 0;
> > +}
> > +
> >  static const struct gpio_chip samsung_gpiolib_chip = {
> >  	.request = gpiochip_generic_request,
> >  	.free = gpiochip_generic_free,
> > @@ -948,6 +998,7 @@ static const struct gpio_chip samsung_gpiolib_chip =
> {
> >  	.direction_output = samsung_gpio_direction_output,
> >  	.to_irq = samsung_gpio_to_irq,
> >  	.add_pin_ranges = samsung_add_pin_ranges,
> > +	.set_config = samsung_gpio_set_config,
> >  	.owner = THIS_MODULE,
> >  };
> >
> > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h
> > b/drivers/pinctrl/samsung/pinctrl-samsung.h
> > index ab791afaabf5..23b70ddcaccc 100644
> > --- a/drivers/pinctrl/samsung/pinctrl-samsung.h
> > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.h
> > @@ -61,6 +61,13 @@ enum pincfg_type {
> >  #define PIN_CON_FUNC_INPUT		0x0
> >  #define PIN_CON_FUNC_OUTPUT		0x1
> >
> > +/*
> > + * Values for the pin PUD register.
> > + */
> > +#define DISABLE_PIN_PULL_UP_DOWN	0x0
> > +#define ENABLE_PIN_PULL_DOWN		0x1
> > +#define ENABLE_PIN_PULL_UP		0x3
> Use consistent naming conventions as per this file, so
> PIN_PUD_PULL_UP_DOWN_DISABLE PIN_PUD_PULL_DOWN_ENABLE
> PIN_PUD_PULL_UP_ENABLE
> 
Ack, Will update.
> > +
> >  /**
> >   * enum eint_type - possible external interrupt types.
> >   * @EINT_TYPE_NONE: bank does not support external interrupts
> > --
> > 2.17.1
> 
> 
Regards,
Vishnu Reddy



WARNING: multiple messages have this Message-ID (diff)
From: "Vishnu Reddy" <vishnu.reddy@samsung.com>
To: "'Alim Akhtar'" <alim.akhtar@samsung.com>, <krzk@kernel.org>,
	<s.nawrocki@samsung.com>, <linus.walleij@linaro.org>
Cc: <linux-arm-kernel@lists.infradead.org>,
	<linux-samsung-soc@vger.kernel.org>, <linux-gpio@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <pankaj.dubey@samsung.com>,
	<ravi.patel@samsung.com>
Subject: RE: [PATCH] pinctrl: samsung: Add support for pull-up and pull-down
Date: Thu, 6 Jun 2024 10:41:55 +0530	[thread overview]
Message-ID: <0c5101dab7d0$0de1bfb0$29a53f10$@samsung.com> (raw)
In-Reply-To: <002601dab23c$559263d0$00b72b70$@samsung.com>

Hi Alim, Thank you for reviewing the patch.

> -----Original Message-----
> From: Alim Akhtar [mailto:alim.akhtar@samsung.com]
> Sent: 30 May 2024 08:22
> To: 'Vishnu Reddy' <vishnu.reddy@samsung.com>; krzk@kernel.org;
> s.nawrocki@samsung.com; linus.walleij@linaro.org
> Cc: linux-arm-kernel@lists.infradead.org; linux-samsung-
> soc@vger.kernel.org; linux-gpio@vger.kernel.org; linux-
> kernel@vger.kernel.org; pankaj.dubey@samsung.com;
> ravi.patel@samsung.com
> Subject: RE: [PATCH] pinctrl: samsung: Add support for pull-up and pull-down
> 
> Hi Vishnu,
> 
> > -----Original Message-----
> > From: Vishnu Reddy <vishnu.reddy@samsung.com>
> > Sent: Wednesday, May 29, 2024 12:30 PM
> > To: krzk@kernel.org; s.nawrocki@samsung.com;
> alim.akhtar@samsung.com;
> > linus.walleij@linaro.org
> > Cc: linux-arm-kernel@lists.infradead.org;
> > linux-samsung-soc@vger.kernel.org;
> > linux-gpio@vger.kernel.org; linux-kernel@vger.kernel.org;
> > pankaj.dubey@samsung.com; ravi.patel@samsung.com
> > Subject: [PATCH] pinctrl: samsung: Add support for pull-up and
> > pull-down
> >
> > gpiolib framework has the implementation of setting up the PUD
> > configuration for GPIO pins but there is no driver support.
> >
> > Add support to handle the PUD configuration request from the userspace
> > in samsung pinctrl driver.
> >
> > Signed-off-by: Vishnu Reddy <vishnu.reddy@samsung.com>
> > ---
> >  drivers/pinctrl/samsung/pinctrl-samsung.c | 51
> > +++++++++++++++++++++++ drivers/pinctrl/samsung/pinctrl-samsung.h |
> 7
> > ++++
> >  2 files changed, 58 insertions(+)
> >
> > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c
> > b/drivers/pinctrl/samsung/pinctrl-samsung.c
> > index ed07e23e0912..a4b6eea5e168 100644
> > --- a/drivers/pinctrl/samsung/pinctrl-samsung.c
> > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c
> > @@ -939,6 +939,56 @@ static int samsung_pinctrl_unregister(struct
> > platform_device *pdev,
> >  	return 0;
> >  }
> >
> > +/*
> > + * samsung_gpio_set_pud will enable or disable the pull-down and
> > + * pull-up for the gpio pins in the PUD register.
> > + */
> > +static void samsung_gpio_set_pud(struct gpio_chip *gc, unsigned int
> offset,
> > +				 unsigned int value)
> > +{
> > +	struct samsung_pin_bank *bank = gpiochip_get_data(gc);
> > +	const struct samsung_pin_bank_type *type = bank->type;
> > +	void __iomem *reg;
> > +	unsigned int data;
> > +
> > +	reg = bank->pctl_base + bank->pctl_offset;
> > +	data = readl(reg + type->reg_offset[PINCFG_TYPE_PUD]);
> > +	data &= ~(0xf << (offset * 4));
> For the mask, you can use "type->fld_width" as that is more generic and will
> work for all SoC I didn’t get, why you are multiplying offset with 4? Is this true
> for all SoC?
Ack, Will update.
> 
> > +	data |= value << (offset * 4);
> > +	writel(data, reg + type->reg_offset[PINCFG_TYPE_PUD]);
> > +}
> > +
> > +/*
> > + * samsung_gpio_set_config will identify the type of PUD config based
> > + * on the gpiolib request to enable or disable the PUD configuration.
> > + */
> > +static int samsung_gpio_set_config(struct gpio_chip *gc, unsigned int
> offset,
> > +				   unsigned long config)
> > +{
> > +	struct samsung_pin_bank *bank = gpiochip_get_data(gc);
> > +	unsigned long flags;
> > +	unsigned int value = 0;
> > +
> > +	switch (pinconf_to_config_param(config)) {
> > +	case PIN_CONFIG_BIAS_DISABLE:
> > +		value = DISABLE_PIN_PULL_UP_DOWN;
> > +		break;
> > +	case PIN_CONFIG_BIAS_PULL_DOWN:
> > +		value = ENABLE_PIN_PULL_DOWN;
> > +		break;
> > +	case PIN_CONFIG_BIAS_PULL_UP:
> > +		value = ENABLE_PIN_PULL_UP;
> > +		break;
> > +	default:
> > +		return -ENOTSUPP;
> > +	}
> > +
> > +	raw_spin_lock_irqsave(&bank->slock, flags);
> > +	samsung_gpio_set_pud(gc, offset, value);
> > +	raw_spin_unlock_irqrestore(&bank->slock, flags);
> > +	return 0;
> > +}
> > +
> >  static const struct gpio_chip samsung_gpiolib_chip = {
> >  	.request = gpiochip_generic_request,
> >  	.free = gpiochip_generic_free,
> > @@ -948,6 +998,7 @@ static const struct gpio_chip samsung_gpiolib_chip =
> {
> >  	.direction_output = samsung_gpio_direction_output,
> >  	.to_irq = samsung_gpio_to_irq,
> >  	.add_pin_ranges = samsung_add_pin_ranges,
> > +	.set_config = samsung_gpio_set_config,
> >  	.owner = THIS_MODULE,
> >  };
> >
> > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h
> > b/drivers/pinctrl/samsung/pinctrl-samsung.h
> > index ab791afaabf5..23b70ddcaccc 100644
> > --- a/drivers/pinctrl/samsung/pinctrl-samsung.h
> > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.h
> > @@ -61,6 +61,13 @@ enum pincfg_type {
> >  #define PIN_CON_FUNC_INPUT		0x0
> >  #define PIN_CON_FUNC_OUTPUT		0x1
> >
> > +/*
> > + * Values for the pin PUD register.
> > + */
> > +#define DISABLE_PIN_PULL_UP_DOWN	0x0
> > +#define ENABLE_PIN_PULL_DOWN		0x1
> > +#define ENABLE_PIN_PULL_UP		0x3
> Use consistent naming conventions as per this file, so
> PIN_PUD_PULL_UP_DOWN_DISABLE PIN_PUD_PULL_DOWN_ENABLE
> PIN_PUD_PULL_UP_ENABLE
> 
Ack, Will update.
> > +
> >  /**
> >   * enum eint_type - possible external interrupt types.
> >   * @EINT_TYPE_NONE: bank does not support external interrupts
> > --
> > 2.17.1
> 
> 
Regards,
Vishnu Reddy



_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2024-06-06  5:44 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20240529070220epcas5p140580a28b93ce5cb256ef825c778c649@epcas5p1.samsung.com>
2024-05-29  6:59 ` [PATCH] pinctrl: samsung: Add support for pull-up and pull-down Vishnu Reddy
2024-05-29  6:59   ` Vishnu Reddy
2024-05-30  2:51   ` Alim Akhtar
2024-05-30  2:51     ` Alim Akhtar
2024-06-06  5:11     ` Vishnu Reddy [this message]
2024-06-06  5:11       ` Vishnu Reddy
2024-06-01 16:11   ` Krzysztof Kozlowski
2024-06-01 16:11     ` Krzysztof Kozlowski
2024-06-06  5:11     ` Vishnu Reddy
2024-06-06  5:11       ` Vishnu Reddy
2024-06-26 11:47     ` Vishnu Reddy

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='0c5101dab7d0$0de1bfb0$29a53f10$@samsung.com' \
    --to=vishnu.reddy@samsung.com \
    --cc=alim.akhtar@samsung.com \
    --cc=krzk@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=pankaj.dubey@samsung.com \
    --cc=ravi.patel@samsung.com \
    --cc=s.nawrocki@samsung.com \
    /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.