Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 123707
b: refs/heads/master
c: 72880ad
h: refs/heads/master
i:
  123705: e2da8c6
  123703: f675b4b
v: v3
  • Loading branch information
Daniel Silverstone authored and Ben Dooks committed Dec 14, 2008
1 parent 5e62e3b commit 7680166
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 44 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fbd627100bc4a9ebce8c7617df499ee5db763780
refs/heads/master: 72880ad866c21badace4d8026c1e58f2fde087fb
1 change: 1 addition & 0 deletions trunk/arch/arm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@ config ARCH_KS8695
bool "Micrel/Kendin KS8695"
select CPU_ARM922T
select GENERIC_GPIO
select ARCH_REQUIRE_GPIOLIB
help
Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
System-on-Chip devices.
Expand Down
3 changes: 3 additions & 0 deletions trunk/arch/arm/mach-ks8695/board-micrel.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <asm/mach/map.h>
#include <asm/mach/irq.h>

#include <mach/gpio.h>
#include <mach/devices.h>

#include "generic.h"
Expand All @@ -39,6 +40,8 @@ static void __init micrel_init(void)
{
printk(KERN_INFO "Micrel KS8695 Development Board initializing\n");

ks8695_register_gpios();

#ifdef CONFIG_PCI
ks8695_init_pci(&micrel_pci);
#endif
Expand Down
39 changes: 29 additions & 10 deletions trunk/arch/arm/mach-ks8695/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
* arch/arm/mach-ks8695/gpio.c
*
* Copyright (C) 2006 Andrew Victor
* Updated to GPIOLIB, Copyright 2008 Simtec Electronics
* Daniel Silverstone <dsilvers@simtec.co.uk>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
Expand Down Expand Up @@ -35,7 +37,7 @@
* Configure a GPIO line for either GPIO function, or its internal
* function (Interrupt, Timer, etc).
*/
static void __init_or_module ks8695_gpio_mode(unsigned int pin, short gpio)
static void ks8695_gpio_mode(unsigned int pin, short gpio)
{
unsigned int enable[] = { IOPC_IOEINT0EN, IOPC_IOEINT1EN, IOPC_IOEINT2EN, IOPC_IOEINT3EN, IOPC_IOTIM0EN, IOPC_IOTIM1EN };
unsigned long x, flags;
Expand All @@ -61,7 +63,7 @@ static unsigned short gpio_irq[] = { KS8695_IRQ_EXTERN0, KS8695_IRQ_EXTERN1, KS8
/*
* Configure GPIO pin as external interrupt source.
*/
int __init_or_module ks8695_gpio_interrupt(unsigned int pin, unsigned int type)
int ks8695_gpio_interrupt(unsigned int pin, unsigned int type)
{
unsigned long x, flags;

Expand Down Expand Up @@ -94,7 +96,7 @@ EXPORT_SYMBOL(ks8695_gpio_interrupt);
/*
* Configure the GPIO line as an input.
*/
int __init_or_module gpio_direction_input(unsigned int pin)
static int ks8695_gpio_direction_input(struct gpio_chip *gc, unsigned int pin)
{
unsigned long x, flags;

Expand All @@ -115,13 +117,13 @@ int __init_or_module gpio_direction_input(unsigned int pin)

return 0;
}
EXPORT_SYMBOL(gpio_direction_input);


/*
* Configure the GPIO line as an output, with default state.
*/
int __init_or_module gpio_direction_output(unsigned int pin, unsigned int state)
static int ks8695_gpio_direction_output(struct gpio_chip *gc,
unsigned int pin, int state)
{
unsigned long x, flags;

Expand Down Expand Up @@ -150,13 +152,13 @@ int __init_or_module gpio_direction_output(unsigned int pin, unsigned int state)

return 0;
}
EXPORT_SYMBOL(gpio_direction_output);


/*
* Set the state of an output GPIO line.
*/
void gpio_set_value(unsigned int pin, unsigned int state)
static void ks8695_gpio_set_value(struct gpio_chip *gc,
unsigned int pin, int state)
{
unsigned long x, flags;

Expand All @@ -175,13 +177,12 @@ void gpio_set_value(unsigned int pin, unsigned int state)

local_irq_restore(flags);
}
EXPORT_SYMBOL(gpio_set_value);


/*
* Read the state of a GPIO line.
*/
int gpio_get_value(unsigned int pin)
static int ks8695_gpio_get_value(struct gpio_chip *gc, unsigned int pin)
{
unsigned long x;

Expand All @@ -191,7 +192,6 @@ int gpio_get_value(unsigned int pin)
x = __raw_readl(KS8695_GPIO_VA + KS8695_IOPD);
return (x & IOPD(pin)) != 0;
}
EXPORT_SYMBOL(gpio_get_value);


/*
Expand Down Expand Up @@ -219,6 +219,25 @@ int irq_to_gpio(unsigned int irq)
}
EXPORT_SYMBOL(irq_to_gpio);

/* GPIOLIB interface */

static struct gpio_chip ks8695_gpio_chip = {
.label = "KS8695",
.direction_input = ks8695_gpio_direction_input,
.direction_output = ks8695_gpio_direction_output,
.get = ks8695_gpio_get_value,
.set = ks8695_gpio_set_value,
.base = 0,
.ngpio = 16,
.can_sleep = 0,
};

/* Register the GPIOs */
void ks8695_register_gpios(void)
{
if (gpiochip_add(&ks8695_gpio_chip))
printk(KERN_ERR "Unable to register core GPIOs\n");
}

/* .... Debug interface ..................................................... */

Expand Down
45 changes: 12 additions & 33 deletions trunk/arch/arm/mach-ks8695/include/mach/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,53 +30,32 @@
#define KS8695_GPIO_14 14
#define KS8695_GPIO_15 15


/*
* Configure GPIO pin as external interrupt source.
*/
int __init_or_module ks8695_gpio_interrupt(unsigned int pin, unsigned int type);

/*
* Configure the GPIO line as an input.
*/
int __init_or_module gpio_direction_input(unsigned int pin);

/*
* Configure the GPIO line as an output, with default state.
*/
int __init_or_module gpio_direction_output(unsigned int pin, unsigned int state);

/*
* Set the state of an output GPIO line.
*/
void gpio_set_value(unsigned int pin, unsigned int state);

/*
* Read the state of a GPIO line.
*/
int gpio_get_value(unsigned int pin);
extern int ks8695_gpio_interrupt(unsigned int pin, unsigned int type);

/*
* Map GPIO line to IRQ number.
*/
int gpio_to_irq(unsigned int pin);
extern int gpio_to_irq(unsigned int pin);

/*
* Map IRQ number to GPIO line.
*/
int irq_to_gpio(unsigned int irq);

extern int irq_to_gpio(unsigned int irq);

#include <asm-generic/gpio.h>

static inline int gpio_request(unsigned int pin, const char *label)
{
return 0;
}
/* If it turns out that we need to optimise GPIO access for the
* Micrel's GPIOs, then these can be changed to check their argument
* directly as static inlines. However for now it's probably not
* worthwhile.
*/
#define gpio_get_value __gpio_get_value
#define gpio_set_value __gpio_set_value

static inline void gpio_free(unsigned int pin)
{
might_sleep();
}
/* Register the GPIOs */
extern void ks8695_register_gpios(void);

#endif

0 comments on commit 7680166

Please sign in to comment.