>-----Original Message-----
>From: Mike Frysinger [mailto:[email protected]]
>Sent: Wednesday, November 18, 2009 1:55 PM
>To: [email protected]
>Cc: [email protected]
>Subject: Re: [Linux-kernel-commits] [7841] trunk: bug [#5689],
>don't set select num as 0 while using gpio cs
>
>On Wed, Nov 18, 2009 at 00:46, <[email protected]> wrote:
>> Revision 7841 Author bhsong Date 2009-11-18 00:46:26 -0500
>(Wed, 18 Nov
>> 2009)
>>
>> Log Message
>>
>> bug [#5689], don't set select num as 0 while using gpio cs
>>
>> fix problems pointed out by Michael and Mike
>>
>> Modified: trunk/arch/blackfin/include/asm/bfin5xx_spi.h
>(7840 => 7841)
>>
>> -#define USE_GPIO_CS 0x8000
>> +#define MAX_CTRL_CS 8 /* cs in spi controller */
>> +#define MAX_GPIO_CS MAX_BLACKFIN_GPIOS /* gpio
>can be cs */
>
>this prevents using GPIOs that are integrated via gpiolib, and i dont
>think there's a problem with those. how about the bus driver simply
>uses return value from gpio_request() to figure out whether the gpio
>in question is valid ?
Sorry. I don't know what you exactly mean. You mean GPIO between
MAX_BLACKFIN_GPIOS and ARCH_NR_GPIOS?
MAX_BLACKFIN_GPIOS should be just the number right of GPIOs in every
blackfin processor.
>
>> Modified: trunk/drivers/spi/spi_bfin5xx.c (7840 => 7841)
>>
>> /* Chip select operation functions for cs_change flag */
>> static void bfin_spi_cs_active(struct master_data *drv_data, struct
>> slave_data *chip)
>> {
>> - if (likely(!(chip->chip_select_num & USE_GPIO_CS))) {
>> + if (likely(chip->chip_select_num < MAX_CTRL_CS)) {
>> u16 flag = read_FLAG(drv_data);
>>
>> flag &= ~chip->flag;
>> @@ -198,7 +198,7 @@
>>
>> static void bfin_spi_cs_deactive(struct master_data
>*drv_data, struct
>> slave_data *chip)
>> {
>> - if (likely(!(chip->chip_select_num & USE_GPIO_CS))) {
>> + if (likely(chip->chip_select_num < MAX_CTRL_CS)) {
>> u16 flag = read_FLAG(drv_data);
>>
>> flag |= chip->flag;
>> @@ -216,7 +216,7 @@
>> /* enable or disable the pin muxed by GPIO and SPI CS to
>work as SPI CS */
>> static inline void bfin_spi_cs_enable(struct master_data
>*drv_data, struct
>> slave_data *chip)
>> {
>> - if (!(chip->chip_select_num & USE_GPIO_CS)) {
>> + if (chip->chip_select_num < MAX_CTRL_CS) {
>> u16 flag = read_FLAG(drv_data);
>>
>> flag |= (chip->flag >> 8);
>
>i wonder what's better for these cs functions. create two sets of
>function pointers (enable/disable/activate/deactivate) and split the
>hardware cs from the gpio cs, or stick with these inline checks.
Both ok to me.
>-mike
>
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits