From mboxrd@z Thu Jan 1 00:00:00 1970 From: Minkyu Kang Date: Thu, 18 Aug 2011 17:13:09 +0900 Subject: [U-Boot] [PATCH 1/2 v4] i2c:gpio:s5p: I2C GPIO Software implementation (via soft_i2c) In-Reply-To: <1313137931-9913-2-git-send-email-l.majewski@samsung.com> References: <1310372331-26637-1-git-send-email-l.majewski@samsung.com> <1313137931-9913-1-git-send-email-l.majewski@samsung.com> <1313137931-9913-2-git-send-email-l.majewski@samsung.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Lukasz Majewski, On 12 August 2011 17:32, Lukasz Majewski wrote: > This patch adds support for software I2C for GONI reference target. > It adds support for access to GPIOs by number, not as it is present, > by bank and offset. > > Signed-off-by: Lukasz Majewski > Signed-off-by: Kyungmin Park > Cc: Minkyu Kang > Cc: Heiko Schocher > > --- > Changes for v2: > ? ? ? ?- Generic GPIO code added to arch/arm/gpio.h > ? ? ? ?- Platform dependent GPIO code added to board/samsung/goni.c > ? ? ? ?- Code cleanup > Changes for v3: > ? ? ? ?- I2C GPIO common code added to drivers/gpio/s5p_gpio.c > ? ? ? ?- i2c_init_board() function added(required by soft_i2c) > Changes for v4: > ? ? ? ?- i2x_init_board() removed > ? ? ? ?- s5pc210 support added > ? ? ? ?- GPIO code and I2C enable code split to separate patches > --- > ?arch/arm/include/asm/arch-s5pc1xx/gpio.h | ? 38 +++++++++++++++++++++++++++++ > ?arch/arm/include/asm/arch-s5pc2xx/gpio.h | ? 39 ++++++++++++++++++++++++++++++ > ?board/samsung/goni/goni.c ? ? ? ? ? ? ? ?| ? ?2 + > ?board/samsung/universal_c210/universal.c | ? ?2 + > ?drivers/gpio/s5p_gpio.c ? ? ? ? ? ? ? ? ?| ? 21 ++++++++++++++++ > ?5 files changed, 102 insertions(+), 0 deletions(-) > diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c > index e24cd29..adc1e0e 100644 > --- a/board/samsung/goni/goni.c > +++ b/board/samsung/goni/goni.c > @@ -29,11 +29,13 @@ > ?DECLARE_GLOBAL_DATA_PTR; > > ?static struct s5pc110_gpio *s5pc110_gpio; > +void *s5p_gpio; > > ?int board_init(void) > ?{ > ? ? ? ?/* Set Initial global variables */ > ? ? ? ?s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE; > + ? ? ? s5p_gpio = (void *) s5pc110_gpio; I can't understand it. Why is it need? If you want to get gpio base address, then use the define value directly. s5p_gpio pointer is unnecessary. > > ? ? ? ?gd->bd->bi_arch_number = MACH_TYPE_GONI; > ? ? ? ?gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; > diff --git a/board/samsung/universal_c210/universal.c b/board/samsung/universal_c210/universal.c > index 1b27e8b..b4a7f86 100644 > --- a/board/samsung/universal_c210/universal.c > +++ b/board/samsung/universal_c210/universal.c > @@ -32,6 +32,7 @@ DECLARE_GLOBAL_DATA_PTR; > > ?struct s5pc210_gpio_part1 *gpio1; > ?struct s5pc210_gpio_part2 *gpio2; > +void *s5p_gpio; > ?unsigned int board_rev; > > ?u32 get_board_rev(void) > @@ -50,6 +51,7 @@ int board_init(void) > ?{ > ? ? ? ?gpio1 = (struct s5pc210_gpio_part1 *) S5PC210_GPIO_PART1_BASE; > ? ? ? ?gpio2 = (struct s5pc210_gpio_part2 *) S5PC210_GPIO_PART2_BASE; > + ? ? ? s5p_gpio = (void *) gpio1; /* ptr used with I2C SW implementation */ How can use gpio part2?? > > ? ? ? ?gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210; > ? ? ? ?gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; > diff --git a/drivers/gpio/s5p_gpio.c b/drivers/gpio/s5p_gpio.c > index 2043859..49c43c7 100644 > --- a/drivers/gpio/s5p_gpio.c > +++ b/drivers/gpio/s5p_gpio.c > @@ -141,3 +141,24 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode) > > ? ? ? ?writel(value, &bank->drv); > ?} > + > +int s5p_gpio_get_nr(void *gp_ptr, int gpio) > +{ > + ? ? ? unsigned int offset = gp_ptr - (void *) s5p_gpio; As I said.. the purpose of s5p_gpio is to get base address, then please use define value. > + ? ? ? offset /= sizeof(struct s5p_gpio_bank); > + > + ? ? ? return (offset * GPIO_PER_BANK) + gpio; > +} > + > +struct s5p_gpio_bank *s5p_gpio_get_bank(int nr) > +{ > + ? ? ? int bank = nr / GPIO_PER_BANK; > + ? ? ? bank *= sizeof(struct s5p_gpio_bank); > + > + ? ? ? return (struct s5p_gpio_bank *) ((void *) s5p_gpio + bank); > +} > + > +int s5p_gpio_get_pin(int nr) > +{ > + ? ? ? return nr % GPIO_PER_BANK; > +} > -- And you should solve how can use gpio part2. Thanks Minkyu Kang. -- from. prom. www.promsoft.net