Lawrence R. Johnson 5ab884b254 ppc4xx: Add functionality to GPIO support
This patch makes two additions to GPIO support:

First, it adds function gpio_read_in_bit() to read the a bit from the
GPIO Input Register (GPIOx_IR) in the same way that function
gpio_read_out_bit() reads a bit from the GPIO Output Register
(GPIOx_OR).

Second, it modifies function gpio_set_chip_configuration() to provide
an additional option for configuring the GPIO from the
"CFG_4xx_GPIO_TABLE".

According to the 440EPx User's Manual, when an alternate output is used,
the three-state control is configured in one of two ways, depending on
the particular output.  The first option is to select the corresponding
alternate three-state control in the GPIOx_TRSH/L registers.  The second
option is to select the GPIO Three-State Control Register (GPIOx_TCR) in
the GPIOx_TRSH/L registers, and set the corresponding bit in the
GPIOx_TCR register to enable the output.  For example, the Manual
specifies configuring the GPIO00 Alternate 1 Signal (PreAddr07) to use
the alternate three-state control (first option), and specifies
configuring the GPIO32 Alternate 1 Signal (USB2OM0) with the output
enabled in the GPIOx_TCR register (second option).

Currently, gpio_set_chip_configuration() configures all alternate signal
outputs to use the first option.  This patch allow the second option to
be selected by setting the "out_val" element in the table entry to
"GPIO_OUT_1".  The first option is used when the "out_val" element is
set to "GPIO_OUT_0".  Because "out_val" is not currently used when an
alternate signal is selected, and because all current GPIO tables set
"out_val" to "GPIO_OUT_0" for all alternate signals, this patch should
not change any existing configurations.

Signed-off-by: Larry Johnson <lrj@acm.org>
2008-01-04 11:38:45 +01:00
..
2003-06-27 21:31:46 +00:00
2001-04-28 17:59:11 +00:00
2003-06-27 21:31:46 +00:00
2005-10-13 16:45:02 +02:00
2007-10-31 21:21:46 +01:00
2007-07-27 14:43:59 +02:00
2000-08-21 15:05:47 +00:00
2007-12-11 22:34:20 -06:00
2007-08-10 11:02:32 -05:00
2007-08-14 01:47:44 -05:00
2005-09-26 00:44:15 +02:00
2001-08-05 15:35:05 +00:00
2003-06-27 21:31:46 +00:00
2000-11-20 17:21:10 +00:00
2003-06-27 21:31:46 +00:00
2003-06-27 21:31:46 +00:00
2001-04-28 17:59:11 +00:00
2008-01-03 09:46:55 -06:00
2003-06-27 21:31:46 +00:00
2003-06-27 21:31:46 +00:00
2000-10-11 22:04:29 +00:00
2001-04-28 17:59:11 +00:00
2000-08-21 15:05:47 +00:00
2000-08-21 15:05:47 +00:00
2007-10-31 21:20:49 +01:00