All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chanwoo Choi <cw00.choi@samsung.com>
To: Sangjung Woo <sangjung.woo@samsung.com>
Cc: MyungJoo Ham <myungjoo.ham@samsung.com>,
	linux-kernel@vger.kernel.org,
	Krzysztof Kozlowski <k.kozlowski@samsung.com>,
	Seung-Woo Kim <sw0312.kim@samsung.com>
Subject: Re: [PATCHv4 1/8] extcon: Add resource-managed extcon register function
Date: Mon, 21 Apr 2014 19:32:53 +0900	[thread overview]
Message-ID: <5354F3D5.3020800@samsung.com> (raw)
In-Reply-To: <1398075015-19211-2-git-send-email-sangjung.woo@samsung.com>

Hi,

This patch has some bug and need code clean.
I'll fix it and resend only this patch on v5.

Thanks,
Chanwoo Choi

On 04/21/2014 07:10 PM, Sangjung Woo wrote:
> Add resource-managed extcon device register function for convenience.
> For example, if a extcon device is attached with new
> devm_extcon_dev_register(), that extcon device is automatically
> unregistered on driver detach.
> 
> Signed-off-by: Sangjung Woo <sangjung.woo@samsung.com>
> ---
>  drivers/extcon/extcon-class.c |   64 +++++++++++++++++++++++++++++++++++++++++
>  include/linux/extcon.h        |   17 +++++++++++
>  2 files changed, 81 insertions(+)
> 
> diff --git a/drivers/extcon/extcon-class.c b/drivers/extcon/extcon-class.c
> index 7ab21aa..645b02b 100644
> --- a/drivers/extcon/extcon-class.c
> +++ b/drivers/extcon/extcon-class.c
> @@ -819,6 +819,70 @@ void extcon_dev_unregister(struct extcon_dev *edev)
>  }
>  EXPORT_SYMBOL_GPL(extcon_dev_unregister);
>  
> +static void devm_extcon_dev_release(struct device *dev, void *res)
> +{
> +	extcon_dev_unregister((struct extcon_dev *)res);

'res' is double pointer. this line have to modify as following:
	extcon_dev_unregister(*(struct extcon_dev **)res);

> +}
> +
> +static int devm_extcon_dev_match(struct device *dev, void *res, void *data)
> +{
> +	return res == data;

'res' is double pointer so this line have to modify as following:
	return *res == data;

and additionally add error exception code

	struct extcon_dev **r = res;

	if (!r || !*r) {
		WARN_ON(!r || !*r);
		return 0;
	}

	return *r == data;

> +}
> +
> +/**
> + * devm_extcon_dev_register() - Resource-managed extcon_dev_register()
> + * @dev:	device to allocate extcon device
> + * @edev:	the new extcon device to register
> + *
> + * Managed extcon_dev_register() function. If extcon device is attached with
> + * this function, that extcon device is automatically unregistered on driver
> + * detach. Internally this function calls extcon_dev_register() function.
> + * To get more information, refer that function.
> + *
> + * If extcon device is registered with this function and the device needs to be
> + * unregistered separately, devm_extcon_dev_unregister() should be used.
> + *
> + * RETURNS:
> + * 0 on success, negative error number on failure.
> + */
> +int devm_extcon_dev_register(struct device *dev, struct extcon_dev *edev)
> +{
> +	struct extcon_dev **ptr;
> +	int ret;
> +
> +	ptr = devres_alloc(devm_extcon_dev_release, sizeof(*ptr),
> +			GFP_KERNEL);
> +	if (!ptr)
> +		return -ENOMEM;
> +
> +	ret = extcon_dev_register(edev);
> +	if (ret) {
> +		devres_free(ptr);
> +		return ret;
> +	}
> +
> +	*ptr = edev;
> +	devres_add(dev, ptr);
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL_GPL(devm_extcon_dev_register);
> +
> +/**
> + * devm_extcon_dev_unregister() - Resource-managed extcon_dev_unregister()
> + * @dev:	device the extcon belongs to
> + * @edev:	the extcon device to unregister
> + *
> + * Unregister extcon device that is registered with devm_extcon_dev_register()
> + * function.
> + */
> +void devm_extcon_dev_unregister(struct device *dev, struct extcon_dev *edev)
> +{
> +	WARN_ON(devres_release(dev, devm_extcon_dev_release,
> +			devm_extcon_dev_match, edev));

Need to keep the indentation for readability.

> +}
> +EXPORT_SYMBOL_GPL(devm_extcon_dev_unregister);
> +
>  #ifdef CONFIG_OF
>  /*
>   * extcon_get_edev_by_phandle - Get the extcon device from devicetree
> diff --git a/include/linux/extcon.h b/include/linux/extcon.h
> index f488145..6a17f69 100644
> --- a/include/linux/extcon.h
> +++ b/include/linux/extcon.h
> @@ -188,6 +188,14 @@ extern void extcon_dev_unregister(struct extcon_dev *edev);
>  extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name);
>  
>  /*
> + * Resource-managed extcon device register function.
> + */
> +extern int devm_extcon_dev_register(struct device *dev,
> +				    struct extcon_dev *edev);
> +extern void devm_extcon_dev_unregister(struct device *dev,
> +				       struct extcon_dev *edev);
> +
> +/*
>   * get/set/update_state access the 32b encoded state value, which represents
>   * states of all possible cables of the multistate port. For example, if one
>   * calls extcon_set_state(edev, 0x7), it may mean that all the three cables
> @@ -254,6 +262,15 @@ static inline int extcon_dev_register(struct extcon_dev *edev)
>  
>  static inline void extcon_dev_unregister(struct extcon_dev *edev) { }
>  
> +static inline devm_extcon_dev_register(struct device *dev,

Missing the vairable type of return value.

> +				       struct extcon_dev *edev)
> +{
> +	return 0;
> +}
> +
> +static inline devm_extcon_dev_unregister(struct device *dev,

Missing the vairable type of return value.

> +					 struct extcon_dev *edev) { }
> +
>  static inline u32 extcon_get_state(struct extcon_dev *edev)
>  {
>  	return 0;
> 


  reply	other threads:[~2014-04-21 10:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-21 10:10 [PATCHv4 0/8] Resource-managed extcon device register function Sangjung Woo
2014-04-21 10:10 ` [PATCHv4 1/8] extcon: Add resource-managed extcon " Sangjung Woo
2014-04-21 10:32   ` Chanwoo Choi [this message]
2014-04-21 10:10 ` [PATCHv4 2/8] extcon: adc-jack: Use devm_extcon_dev_register() Sangjung Woo
2014-04-21 10:10 ` [PATCHv4 3/8] extcon: gpio: " Sangjung Woo
2014-04-21 10:10 ` [PATCHv4 4/8] extcon: max14577: " Sangjung Woo
2014-04-21 10:10 ` [PATCHv4 5/8] extcon: max77693: " Sangjung Woo
2014-04-21 10:10 ` [PATCHv4 6/8] extcon: max8997: " Sangjung Woo
2014-04-21 10:10 ` [PATCHv4 7/8] extcon: palmas: " Sangjung Woo
2014-04-21 10:10 ` [PATCHv4 8/8] extcon: arizona: " Sangjung Woo
2014-04-21 11:31 ` [PATCHv4 0/8] Resource-managed extcon device register function Chanwoo Choi

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=5354F3D5.3020800@samsung.com \
    --to=cw00.choi@samsung.com \
    --cc=k.kozlowski@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=myungjoo.ham@samsung.com \
    --cc=sangjung.woo@samsung.com \
    --cc=sw0312.kim@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.