From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Laurent Pinchart <laurentp@cse-semaphore.com>
Cc: David Brownell <dbrownell@users.sourceforge.net>,
Greg Kroah-Hartman <greg@kroah.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
linuxppc-dev@ozlabs.org, Li Yang <leoli@freescale.com>,
Timur Tabi <timur@freescale.com>
Subject: Re: [PATCH 1/3] gpiolib: make gpio_to_chip() public
Date: Tue, 19 Aug 2008 18:50:31 +0400 [thread overview]
Message-ID: <20080819145031.GA28616@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <200808191126.33133.laurentp@cse-semaphore.com>
On Tue, Aug 19, 2008 at 11:26:28AM +0200, Laurent Pinchart wrote:
[...]
> > I didn't say "SOC-specific". I said "SOC-model specific", which
> > means that the driver would be not portable even across QE chips
> > (i.e. MPC8323 vs. MPC8360, you can assume that the "CLK12" function
> > is having same PAR/ODR/DAT/DIR bits).
>
> If I'm not mistaken, the PAR bit is used to select between GPIO and
> dedicated mode by definition. It should be safe to assume that setting
> a GPIO in dedicated mode requires the PAR bit to be set. But as I
> stated above, we can ignore that for now until a hardware use case
> comes up.
One more thing: you're assuming that there is one par bit, but
there are two par bits for QE chips. Which one would you set in
set_dedicated()? ;-)
> > > > > If, for some
> > > > > reason (driver not loaded, ...), no GPIO user shows up for that
> > > > > pin, it will stay configured in dedicated mode.
> > > >
> > > > Yes.
> > > >
> > > > > It might be better to set the PAR bit unconditionally in
> > > >
> > > > Why it might be better?
> > >
> > > Because, as explained a few lines down, the board initialization code
> > > will be able to configure a pin in a known state (PAR not set) at boot
> > > time until a driver requests the pin to be switched to dedicated mode.
> >
> > You can do this as I described above. But prior to this, yes, you have
> > to configure the pins and let Linux save these values. There is no other
> > way to pass this information, unfortunately.
>
> Ok.
>
> I started implementing CPM2 dedicated mode support to be used in the
> CPM UART driver for RTS/CTS flow control, and soon realized there was
> a show stopper. The CPM UART driver is mostly CPM1/CPM2 agnostic.
> I can't use a function such as cpm2_gpio32_set_dedicated, as that
> wouldn't work on a CPM1 (at least not on all its ports). I could call
> the right function depending on which port the GPIO is on, but that's
> really hackish and would defeat the purpose of using GPIOs.
You can easily refactor cpm gpio code so that you'll have
common cpm structure with platform-specific "GPIO API extension"
callbacks. Something like this:
/*
* generic structure, does not know anything about cpm1/2/qe, or
* ports width.
*/
struct cpm_gpio_chip {
struct of_mm_gpio_chip mm_gc;
spinlock_t lock;
void (*set_dedicated)(unsigned int gpio);
};
struct cpm1_gpio16_chip {
struct cpm_gpio_chip cpgc;
/* shadowed data register to clear/set bits safely */
u16 cpdata;
};
void cpm_gpio_set_dedicated(unsigned int gpio)
{
struct gpio_chip *gc = gpio_to_chip(gpio);
struct of_gpio_chip *ofgc = to_of_gpio_chip(gc);
struct cpm_gpio_chip *cpgc = to_cpm_gpio_chip(ofgc);
if (cpgc->set_dedicated)
cpgc->set_dedicated(gc->base - gpio);
}
> What we
> really need there is a set_dedicated/set_option/set_whatever function
> in the GPIO API :-/
Won't happen. ;-)
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
WARNING: multiple messages have this Message-ID (diff)
From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Laurent Pinchart <laurentp@cse-semaphore.com>
Cc: linuxppc-dev@ozlabs.org, Greg Kroah-Hartman <greg@kroah.com>,
linux-usb@vger.kernel.org,
David Brownell <dbrownell@users.sourceforge.net>,
Li Yang <leoli@freescale.com>,
linux-kernel@vger.kernel.org, Timur Tabi <timur@freescale.com>
Subject: Re: [PATCH 1/3] gpiolib: make gpio_to_chip() public
Date: Tue, 19 Aug 2008 18:50:31 +0400 [thread overview]
Message-ID: <20080819145031.GA28616@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <200808191126.33133.laurentp@cse-semaphore.com>
On Tue, Aug 19, 2008 at 11:26:28AM +0200, Laurent Pinchart wrote:
[...]
> > I didn't say "SOC-specific". I said "SOC-model specific", which
> > means that the driver would be not portable even across QE chips
> > (i.e. MPC8323 vs. MPC8360, you can assume that the "CLK12" function
> > is having same PAR/ODR/DAT/DIR bits).
>
> If I'm not mistaken, the PAR bit is used to select between GPIO and
> dedicated mode by definition. It should be safe to assume that setting
> a GPIO in dedicated mode requires the PAR bit to be set. But as I
> stated above, we can ignore that for now until a hardware use case
> comes up.
One more thing: you're assuming that there is one par bit, but
there are two par bits for QE chips. Which one would you set in
set_dedicated()? ;-)
> > > > > If, for some
> > > > > reason (driver not loaded, ...), no GPIO user shows up for that
> > > > > pin, it will stay configured in dedicated mode.
> > > >
> > > > Yes.
> > > >
> > > > > It might be better to set the PAR bit unconditionally in
> > > >
> > > > Why it might be better?
> > >
> > > Because, as explained a few lines down, the board initialization code
> > > will be able to configure a pin in a known state (PAR not set) at boot
> > > time until a driver requests the pin to be switched to dedicated mode.
> >
> > You can do this as I described above. But prior to this, yes, you have
> > to configure the pins and let Linux save these values. There is no other
> > way to pass this information, unfortunately.
>
> Ok.
>
> I started implementing CPM2 dedicated mode support to be used in the
> CPM UART driver for RTS/CTS flow control, and soon realized there was
> a show stopper. The CPM UART driver is mostly CPM1/CPM2 agnostic.
> I can't use a function such as cpm2_gpio32_set_dedicated, as that
> wouldn't work on a CPM1 (at least not on all its ports). I could call
> the right function depending on which port the GPIO is on, but that's
> really hackish and would defeat the purpose of using GPIOs.
You can easily refactor cpm gpio code so that you'll have
common cpm structure with platform-specific "GPIO API extension"
callbacks. Something like this:
/*
* generic structure, does not know anything about cpm1/2/qe, or
* ports width.
*/
struct cpm_gpio_chip {
struct of_mm_gpio_chip mm_gc;
spinlock_t lock;
void (*set_dedicated)(unsigned int gpio);
};
struct cpm1_gpio16_chip {
struct cpm_gpio_chip cpgc;
/* shadowed data register to clear/set bits safely */
u16 cpdata;
};
void cpm_gpio_set_dedicated(unsigned int gpio)
{
struct gpio_chip *gc = gpio_to_chip(gpio);
struct of_gpio_chip *ofgc = to_of_gpio_chip(gc);
struct cpm_gpio_chip *cpgc = to_cpm_gpio_chip(ofgc);
if (cpgc->set_dedicated)
cpgc->set_dedicated(gc->base - gpio);
}
> What we
> really need there is a set_dedicated/set_option/set_whatever function
> in the GPIO API :-/
Won't happen. ;-)
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
next prev parent reply other threads:[~2008-08-19 14:50 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-08 16:17 [PATCH 0/3] Patches to support QE USB Host Controller Anton Vorontsov
2008-08-08 16:17 ` Anton Vorontsov
2008-08-08 16:18 ` [PATCH 1/3] gpiolib: make gpio_to_chip() public Anton Vorontsov
2008-08-08 16:18 ` Anton Vorontsov
2008-08-14 14:04 ` Laurent Pinchart
2008-08-14 14:04 ` Laurent Pinchart
2008-08-14 14:14 ` Anton Vorontsov
2008-08-14 14:14 ` Anton Vorontsov
2008-08-14 14:45 ` Laurent Pinchart
2008-08-14 14:45 ` Laurent Pinchart
2008-08-14 15:10 ` Anton Vorontsov
2008-08-14 15:10 ` Anton Vorontsov
2008-08-18 13:58 ` Laurent Pinchart
2008-08-18 13:58 ` Laurent Pinchart
2008-08-18 14:33 ` Anton Vorontsov
2008-08-18 14:33 ` Anton Vorontsov
2008-08-18 14:44 ` Laurent Pinchart
2008-08-18 14:44 ` Laurent Pinchart
2008-08-18 15:33 ` Anton Vorontsov
2008-08-18 15:33 ` Anton Vorontsov
2008-08-19 9:26 ` Laurent Pinchart
2008-08-19 9:26 ` Laurent Pinchart
2008-08-19 14:50 ` Anton Vorontsov [this message]
2008-08-19 14:50 ` Anton Vorontsov
2008-08-08 16:18 ` [PATCH 2/3] powerpc/qe: new call to revert a gpio to a dedicated function Anton Vorontsov
2008-08-08 16:18 ` Anton Vorontsov
2008-08-08 16:18 ` [PATCH 3/3] USB: driver for Freescale QUICC Engine USB Host Controller Anton Vorontsov
2008-08-08 16:18 ` Anton Vorontsov
2008-08-08 23:26 ` [PATCH 0/3] Patches to support QE " Greg KH
2008-08-08 23:26 ` Greg KH
2008-08-26 15:49 ` Anton Vorontsov
2008-08-26 15:49 ` Anton Vorontsov
2008-08-14 12:15 ` Laurent Pinchart
2008-08-14 12:15 ` Laurent Pinchart
2008-09-24 20:04 ` David Brownell
2008-09-24 20:04 ` David Brownell
-- strict thread matches above, loose matches on Subject: below --
2008-09-18 15:16 Anton Vorontsov
2008-09-18 15:17 ` [PATCH 1/3] gpiolib: make gpio_to_chip() public Anton Vorontsov
2008-09-18 15:17 ` Anton Vorontsov
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=20080819145031.GA28616@oksana.dev.rtsoft.ru \
--to=avorontsov@ru.mvista.com \
--cc=dbrownell@users.sourceforge.net \
--cc=greg@kroah.com \
--cc=laurentp@cse-semaphore.com \
--cc=leoli@freescale.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=timur@freescale.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.