All of lore.kernel.org
 help / color / mirror / Atom feed
From: Walter Goossens <waltergoossens-CmkmPbn3yAE@public.gmane.org>
To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
Subject: Re: [PATCH 1/3] i2c-ocores: Adapt for device tree
Date: Wed, 01 Dec 2010 10:37:35 +0100	[thread overview]
Message-ID: <4CF6175F.2040305@home.nl> (raw)
In-Reply-To: <1290615982-1028-2-git-send-email-jonas-A9uVI2HLR7kOP4wsBPIw7w@public.gmane.org>

Hi Jonas,

Seems to work for me on Nios2. (Compile tested. Ran the kernel devices 
were found, did not test functionality)
I know Nios2 is not (yet) a supported platform but we're busy trying to 
get fdt working...
So an ack from my side!

Walter

On 11/24/10 5:26 PM, Jonas Bonn wrote:
> This patch adapts the i2c-ocores driver for being defined and configured via
> a device tree description.
>
> The device tree bits need to be protected by CONFIG_OF guards as this is
> still an optional feature.
>
> Signed-off-by: Jonas Bonn<jonas-A9uVI2HLR7kOP4wsBPIw7w@public.gmane.org>
> ---
>   drivers/i2c/busses/i2c-ocores.c |   64 ++++++++++++++++++++++++++++++++++-----
>   1 files changed, 56 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c
> index 0070371..c05e8c4 100644
> --- a/drivers/i2c/busses/i2c-ocores.c
> +++ b/drivers/i2c/busses/i2c-ocores.c
> @@ -210,6 +210,32 @@ static struct i2c_adapter ocores_adapter = {
>   	.algo		=&ocores_algorithm,
>   };
>
> +#ifdef CONFIG_OF
> +static int ocores_i2c_of_probe(struct platform_device* pdev,
> +				struct ocores_i2c* i2c)
> +{
> +	__be32* val;
> +
> +	val = of_get_property(pdev->dev.of_node, "regstep", NULL);
> +	if (!val) {
> +		dev_err(&pdev->dev, "Missing required parameter 'regstep'");
> +		return -ENODEV;
> +	}
> +	i2c->regstep = be32_to_cpup(val);
> +
> +	val = of_get_property(pdev->dev.of_node, "clock-frequency", NULL);
> +	if (!val) {
> +		dev_err(&pdev->dev,
> +			"Missing required parameter 'clock-frequency'");
> +		return -ENODEV;
> +	}
> +	i2c->clock_khz = be32_to_cpup(val) / 1000;
> +
> +	return 0;
> +}
> +#else
> +#define ocores_i2c_of_probe(pdev,i2c) -ENODEV
> +#endif
>
>   static int __devinit ocores_i2c_probe(struct platform_device *pdev)
>   {
> @@ -227,10 +253,6 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
>   	if (!res2)
>   		return -ENODEV;
>
> -	pdata = (struct ocores_i2c_platform_data*) pdev->dev.platform_data;
> -	if (!pdata)
> -		return -ENODEV;
> -
>   	i2c = kzalloc(sizeof(*i2c), GFP_KERNEL);
>   	if (!i2c)
>   		return -ENOMEM;
> @@ -249,8 +271,16 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
>   		goto map_failed;
>   	}
>
> -	i2c->regstep = pdata->regstep;
> -	i2c->clock_khz = pdata->clock_khz;
> +	pdata = pdev->dev.platform_data;
> +	if (pdata) {
> +		i2c->regstep = pdata->regstep;
> +		i2c->clock_khz = pdata->clock_khz;
> +	} else {
> +		ret = ocores_i2c_of_probe(pdev, i2c);
> +		if (ret)
> +			return ret;
> +	}
> +
>   	ocores_init(i2c);
>
>   	init_waitqueue_head(&i2c->wait);
> @@ -265,6 +295,9 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
>   	i2c->adap = ocores_adapter;
>   	i2c_set_adapdata(&i2c->adap, i2c);
>   	i2c->adap.dev.parent =&pdev->dev;
> +#ifdef CONFIG_OF
> +	i2c->adap.dev.of_node = pdev->dev.of_node;
> +#endif
>
>   	/* add i2c adapter to i2c tree */
>   	ret = i2c_add_adapter(&i2c->adap);
> @@ -274,8 +307,10 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
>   	}
>
>   	/* add in known devices to the bus */
> -	for (i = 0; i<  pdata->num_devices; i++)
> -		i2c_new_device(&i2c->adap, pdata->devices + i);
> +	if (pdata) {
> +		for (i = 0; i<  pdata->num_devices; i++)
> +			i2c_new_device(&i2c->adap, pdata->devices + i);
> +	}
>
>   	return 0;
>
> @@ -344,6 +379,16 @@ static int ocores_i2c_resume(struct platform_device *pdev)
>   #define ocores_i2c_resume	NULL
>   #endif
>
> +#ifdef CONFIG_OF
> +static struct of_device_id ocores_i2c_match[] = {
> +        {
> +                .compatible = "opencores,i2c-ocores",
> +        },
> +        {},
> +};
> +MODULE_DEVICE_TABLE(of, ocores_i2c_match);
> +#endif
> +
>   /* work with hotplug and coldplug */
>   MODULE_ALIAS("platform:ocores-i2c");
>
> @@ -355,6 +400,9 @@ static struct platform_driver ocores_i2c_driver = {
>   	.driver  = {
>   		.owner = THIS_MODULE,
>   		.name = "ocores-i2c",
> +#ifdef CONFIG_OF
> +                .of_match_table = ocores_i2c_match,
> +#endif
>   	},
>   };
>

  parent reply	other threads:[~2010-12-01  9:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-24 16:26 i2c-ocores changes (version 2) Jonas Bonn
     [not found] ` <1290615982-1028-1-git-send-email-jonas-A9uVI2HLR7kOP4wsBPIw7w@public.gmane.org>
2010-11-24 16:26   ` [PATCH 1/3] i2c-ocores: Adapt for device tree Jonas Bonn
     [not found]     ` <1290615982-1028-2-git-send-email-jonas-A9uVI2HLR7kOP4wsBPIw7w@public.gmane.org>
2010-12-01  9:37       ` Walter Goossens [this message]
2011-01-04  1:05       ` Ben Dooks
2010-11-24 16:26   ` [PATCH 2/3] i2c-ocores: Use devres for resource allocation Jonas Bonn
2010-11-24 16:26   ` [PATCH 3/3] i2c-ocores: add some device tree documentation Jonas Bonn
     [not found]     ` <1290615982-1028-4-git-send-email-jonas-A9uVI2HLR7kOP4wsBPIw7w@public.gmane.org>
2010-12-24  4:00       ` Grant Likely
     [not found]         ` <20101224040017.GE2491-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-12-24  9:38           ` Jonas Bonn
2010-12-24 14:02             ` Peter Korsgaard
2010-12-24 20:06             ` Grant Likely
2010-12-06  4:33   ` i2c-ocores changes (version 2) Ben Dooks
     [not found]     ` <4CFC67AA.2080707-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
2010-12-24  4:03       ` Grant Likely

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=4CF6175F.2040305@home.nl \
    --to=waltergoossens-cmkmpbn3yae@public.gmane.org \
    --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.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.