From: Ryan Mallon <ryan-7Wk5F4Od5/oYd5yxfr4S2w@public.gmane.org>
To: Cyril Chemparathy <cyril-l0cyMroinI0@public.gmane.org>
Cc: davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org,
dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org,
khilman-1D3HCaltpLuhEniVeURVKkEOCMrvLtNR@public.gmane.org,
broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org,
rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org,
alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
lrg-kDsPt+C1G03kYMGBc/C6ZA@public.gmane.org
Subject: Re: [PATCH v6 08/12] gpio: add ti-ssp gpio driver
Date: Mon, 22 Nov 2010 09:02:45 +1300 [thread overview]
Message-ID: <4CE97AE5.3040801@bluewatersys.com> (raw)
In-Reply-To: <1290182156-20104-9-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
On 11/20/2010 04:55 AM, Cyril Chemparathy wrote:
> TI's SSP controller pins can be directly read and written to behave like a
> GPIO. This patch adds a GPIO driver that exposes such functionality.
>
> Signed-off-by: Cyril Chemparathy <cyril-l0cyMroinI0@public.gmane.org>
> ---
> +static int __devinit ti_ssp_gpio_probe(struct platform_device *pdev)
> +{
> + const struct ti_ssp_gpio_data *pdata = pdev->dev.platform_data;
> + struct device *dev = &pdev->dev;
> + struct ti_ssp_gpio_chip *gpio;
> + int error;
> +
> + if (!pdata) {
> + dev_err(dev, "platform data not found\n");
> + return -EINVAL;
> + }
> +
> + gpio = kzalloc(sizeof(*gpio), GFP_KERNEL);
> + if (!gpio) {
> + dev_err(dev, "cannot allocate driver data\n");
> + return -ENOMEM;
> + }
> +
> + gpio->dev = dev;
> + gpio->iosel = SSP_PIN_SEL(0, SSP_IN) | SSP_PIN_SEL(1, SSP_IN) |
> + SSP_PIN_SEL(2, SSP_IN) | SSP_PIN_SEL(3, SSP_IN);
> + error = ti_ssp_set_iosel(gpio->dev, gpio->iosel);
> + if (error < 0) {
> + dev_err(dev, "gpio io setup failed (%d)\n", error);
> + goto error;
> + }
> +
> + spin_lock_init(&gpio->lock);
> + platform_set_drvdata(pdev, gpio);
This looks wrong. gpio is of type ti_ssp_gpio_chip, but the ssp core
functions, ssp_read, etc, use dev_to_ssp:
static inline struct ti_ssp *dev_to_ssp(struct device *dev)
{
return dev_get_drvdata(dev->parent);
}
If I understand correctly, the ssp core can only be used to for one
peripheral at a time. Currently the code will allow you to install
several peripherals at once, which will lead to odd behaviour at
runtime. Maybe a better approach would be to have something like this in
drivers/mfd/ti-ssp.c:
struct ti_ssp {
struct resource *res;
struct device *dev;
void __iomem *regs;
struct clk *clk;
int irq;
wait_queue_head_t wqh;
int in_use;
};
static struct ti_ssp ti_ssp = {
.in_use = 0,
};
static DEFINE_SPINLOCK(ti_ssp_lock);
struct ti_ssp *ti_ssp_get(void)
{
spin_lock(&ti_ssp_lock);
if (ti_ssp.in_use) {
spin_unlock(&ti_ssp_lock);
return NULL;
}
ti_ssp.in_use = 1;
spin_unlock(&ti_ssp_lock);
return &ti_ssp;
}
int ti_ssp_put(void)
{
spin_lock(&ti_ssp_lock);
if (!ti_ssp.in_use) {
spin_unlock(&ti_ssp_lock);
return -ENODEV;
}
ti_ssp.in_use = 0;
spin_unlock(&ti_ssp_lock);
return 0;
}
This way, the ssp core api functions can take struct ti_ssp * as their
first argument (which can still be an opaque pointer) and the code
protects against multiple peripherals attempting to register the ssp core.
~Ryan
--
Bluewater Systems Ltd - ARM Technology Solution Centre
Ryan Mallon 5 Amuri Park, 404 Barbadoes St
ryan-7Wk5F4Od5/oYd5yxfr4S2w@public.gmane.org PO Box 13 889, Christchurch 8013
http://www.bluewatersys.com New Zealand
Phone: +64 3 3779127 Freecall: Australia 1800 148 751
Fax: +64 3 3779135 USA 1800 261 2934
------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3.
Spend less time writing and rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
WARNING: multiple messages have this Message-ID (diff)
From: ryan@bluewatersys.com (Ryan Mallon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 08/12] gpio: add ti-ssp gpio driver
Date: Mon, 22 Nov 2010 09:02:45 +1300 [thread overview]
Message-ID: <4CE97AE5.3040801@bluewatersys.com> (raw)
In-Reply-To: <1290182156-20104-9-git-send-email-cyril@ti.com>
On 11/20/2010 04:55 AM, Cyril Chemparathy wrote:
> TI's SSP controller pins can be directly read and written to behave like a
> GPIO. This patch adds a GPIO driver that exposes such functionality.
>
> Signed-off-by: Cyril Chemparathy <cyril@ti.com>
> ---
> +static int __devinit ti_ssp_gpio_probe(struct platform_device *pdev)
> +{
> + const struct ti_ssp_gpio_data *pdata = pdev->dev.platform_data;
> + struct device *dev = &pdev->dev;
> + struct ti_ssp_gpio_chip *gpio;
> + int error;
> +
> + if (!pdata) {
> + dev_err(dev, "platform data not found\n");
> + return -EINVAL;
> + }
> +
> + gpio = kzalloc(sizeof(*gpio), GFP_KERNEL);
> + if (!gpio) {
> + dev_err(dev, "cannot allocate driver data\n");
> + return -ENOMEM;
> + }
> +
> + gpio->dev = dev;
> + gpio->iosel = SSP_PIN_SEL(0, SSP_IN) | SSP_PIN_SEL(1, SSP_IN) |
> + SSP_PIN_SEL(2, SSP_IN) | SSP_PIN_SEL(3, SSP_IN);
> + error = ti_ssp_set_iosel(gpio->dev, gpio->iosel);
> + if (error < 0) {
> + dev_err(dev, "gpio io setup failed (%d)\n", error);
> + goto error;
> + }
> +
> + spin_lock_init(&gpio->lock);
> + platform_set_drvdata(pdev, gpio);
This looks wrong. gpio is of type ti_ssp_gpio_chip, but the ssp core
functions, ssp_read, etc, use dev_to_ssp:
static inline struct ti_ssp *dev_to_ssp(struct device *dev)
{
return dev_get_drvdata(dev->parent);
}
If I understand correctly, the ssp core can only be used to for one
peripheral at a time. Currently the code will allow you to install
several peripherals at once, which will lead to odd behaviour at
runtime. Maybe a better approach would be to have something like this in
drivers/mfd/ti-ssp.c:
struct ti_ssp {
struct resource *res;
struct device *dev;
void __iomem *regs;
struct clk *clk;
int irq;
wait_queue_head_t wqh;
int in_use;
};
static struct ti_ssp ti_ssp = {
.in_use = 0,
};
static DEFINE_SPINLOCK(ti_ssp_lock);
struct ti_ssp *ti_ssp_get(void)
{
spin_lock(&ti_ssp_lock);
if (ti_ssp.in_use) {
spin_unlock(&ti_ssp_lock);
return NULL;
}
ti_ssp.in_use = 1;
spin_unlock(&ti_ssp_lock);
return &ti_ssp;
}
int ti_ssp_put(void)
{
spin_lock(&ti_ssp_lock);
if (!ti_ssp.in_use) {
spin_unlock(&ti_ssp_lock);
return -ENODEV;
}
ti_ssp.in_use = 0;
spin_unlock(&ti_ssp_lock);
return 0;
}
This way, the ssp core api functions can take struct ti_ssp * as their
first argument (which can still be an opaque pointer) and the code
protects against multiple peripherals attempting to register the ssp core.
~Ryan
--
Bluewater Systems Ltd - ARM Technology Solution Centre
Ryan Mallon 5 Amuri Park, 404 Barbadoes St
ryan at bluewatersys.com PO Box 13 889, Christchurch 8013
http://www.bluewatersys.com New Zealand
Phone: +64 3 3779127 Freecall: Australia 1800 148 751
Fax: +64 3 3779135 USA 1800 261 2934
next prev parent reply other threads:[~2010-11-21 20:02 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-19 15:55 [PATCH v6 00/12] tnetv107x ssp drivers Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
[not found] ` <1290182156-20104-1-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-19 15:55 ` [PATCH v6 01/12] misc: add driver for sequencer serial port Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 02/12] davinci: add tnetv107x ssp platform device Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 03/12] davinci: add ssp config for tnetv107x evm board Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 04/12] spi: add ti-ssp spi master driver Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 05/12] davinci: add spi devices on tnetv107x evm Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
[not found] ` <1290182156-20104-6-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-19 16:25 ` Sergei Shtylyov
2010-11-19 16:25 ` Sergei Shtylyov
[not found] ` <4CE6A516.402-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2010-11-19 17:11 ` Cyril Chemparathy
2010-11-19 17:11 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 06/12] regulator: add driver for tps6524x regulator Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 07/12] davinci: add tnetv107x evm regulators Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 08/12] gpio: add ti-ssp gpio driver Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
[not found] ` <1290182156-20104-9-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-21 20:02 ` Ryan Mallon [this message]
2010-11-21 20:02 ` Ryan Mallon
[not found] ` <4CE97AE5.3040801-7Wk5F4Od5/oYd5yxfr4S2w@public.gmane.org>
2010-11-21 21:31 ` Grant Likely
2010-11-21 21:31 ` Grant Likely
2010-11-22 11:20 ` Mark Brown
2010-11-22 11:20 ` Mark Brown
2010-11-22 19:35 ` Ryan Mallon
2010-11-22 19:35 ` Ryan Mallon
2010-11-19 15:55 ` [PATCH v6 09/12] davinci: add tnetv107x evm ti-ssp gpio device Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 10/12] backlight: add support for tps6116x controller Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
2010-11-19 15:55 ` [PATCH v6 11/12] davinci: add tnetv107x evm backlight device Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
[not found] ` <1290182156-20104-12-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-19 16:44 ` Sergei Shtylyov
2010-11-19 16:44 ` Sergei Shtylyov
[not found] ` <4CE6A950.8040704-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2010-11-19 17:04 ` Cyril Chemparathy
2010-11-19 17:04 ` Cyril Chemparathy
[not found] ` <4CE6AE19.6090600-l0cyMroinI0@public.gmane.org>
2010-11-19 17:11 ` Sergei Shtylyov
2010-11-19 17:11 ` Sergei Shtylyov
2010-11-19 15:55 ` [PATCH v6 12/12] davinci: add tnetv107x evm i2c eeprom device Cyril Chemparathy
2010-11-19 15:55 ` Cyril Chemparathy
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=4CE97AE5.3040801@bluewatersys.com \
--to=ryan-7wk5f4od5/oyd5yxfr4s2w@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org \
--cc=broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org \
--cc=cyril-l0cyMroinI0@public.gmane.org \
--cc=davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org \
--cc=dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=khilman-1D3HCaltpLuhEniVeURVKkEOCMrvLtNR@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=lrg-kDsPt+C1G03kYMGBc/C6ZA@public.gmane.org \
--cc=rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org \
--cc=sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@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.