-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86: add support for the RDC R-321x SoC
This patch adds support for the RDC R-321x system-on-chip, also known as R-861x-(G). It uses the generic GPIO API and has support for the on-chip hardware watchdog. Build-fix from: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Florian Fainelli <florian.fainelli@telecomint.eu> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
- Loading branch information
Florian Fainelli
authored and
Ingo Molnar
committed
Jan 30, 2008
1 parent
0acf8e3
commit 5e3a77e
Showing
9 changed files
with
521 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# | ||
# Makefile for the RDC321x specific parts of the kernel | ||
# | ||
obj-$(CONFIG_X86_RDC321X) := gpio.o platform.o wdt.o | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
* Copyright (C) 2007, OpenWrt.org, Florian Fainelli <florian@openwrt.org> | ||
* RDC321x architecture specific GPIO support | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
*/ | ||
|
||
#include <linux/autoconf.h> | ||
#include <linux/init.h> | ||
#include <linux/io.h> | ||
#include <linux/types.h> | ||
#include <linux/module.h> | ||
#include <linux/delay.h> | ||
|
||
#include <asm/mach-rdc321x/rdc321x_defs.h> | ||
|
||
static inline int rdc_gpio_is_valid(unsigned gpio) | ||
{ | ||
return (gpio <= RDC_MAX_GPIO); | ||
} | ||
|
||
static unsigned int rdc_gpio_read(unsigned gpio) | ||
{ | ||
unsigned int val; | ||
|
||
val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x84:0x48)); | ||
outl(val, RDC3210_CFGREG_ADDR); | ||
udelay(10); | ||
val = inl(RDC3210_CFGREG_DATA); | ||
val |= (0x1 << (gpio & 0x1F)); | ||
outl(val, RDC3210_CFGREG_DATA); | ||
udelay(10); | ||
val = 0x80000000 | (7 << 11) | ((gpio&0x20?0x88:0x4C)); | ||
outl(val, RDC3210_CFGREG_ADDR); | ||
udelay(10); | ||
val = inl(RDC3210_CFGREG_DATA); | ||
|
||
return val; | ||
} | ||
|
||
static void rdc_gpio_write(unsigned int val) | ||
{ | ||
if (val) { | ||
outl(val, RDC3210_CFGREG_DATA); | ||
udelay(10); | ||
} | ||
} | ||
|
||
int rdc_gpio_get_value(unsigned gpio) | ||
{ | ||
if (rdc_gpio_is_valid(gpio)) | ||
return (int)rdc_gpio_read(gpio); | ||
else | ||
return -EINVAL; | ||
} | ||
EXPORT_SYMBOL(rdc_gpio_get_value); | ||
|
||
void rdc_gpio_set_value(unsigned gpio, int value) | ||
{ | ||
unsigned int val; | ||
|
||
if (!rdc_gpio_is_valid(gpio)) | ||
return; | ||
|
||
val = rdc_gpio_read(gpio); | ||
|
||
if (value) | ||
val &= ~(0x1 << (gpio & 0x1F)); | ||
else | ||
val |= (0x1 << (gpio & 0x1F)); | ||
|
||
rdc_gpio_write(val); | ||
} | ||
EXPORT_SYMBOL(rdc_gpio_set_value); | ||
|
||
int rdc_gpio_direction_input(unsigned gpio) | ||
{ | ||
return 0; | ||
} | ||
EXPORT_SYMBOL(rdc_gpio_direction_input); | ||
|
||
int rdc_gpio_direction_output(unsigned gpio, int value) | ||
{ | ||
return 0; | ||
} | ||
EXPORT_SYMBOL(rdc_gpio_direction_output); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* | ||
* Generic RDC321x platform devices | ||
* | ||
* Copyright (C) 2007 Florian Fainelli <florian@openwrt.org> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version 2 | ||
* of the License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the | ||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
* Boston, MA 02110-1301, USA. | ||
* | ||
*/ | ||
|
||
#include <linux/init.h> | ||
#include <linux/kernel.h> | ||
#include <linux/list.h> | ||
#include <linux/device.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/version.h> | ||
#include <linux/leds.h> | ||
|
||
#include <asm/gpio.h> | ||
|
||
/* LEDS */ | ||
static struct gpio_led default_leds[] = { | ||
{ .name = "rdc:dmz", .gpio = 1, }, | ||
}; | ||
|
||
static struct gpio_led_platform_data rdc321x_led_data = { | ||
.num_leds = ARRAY_SIZE(default_leds), | ||
.leds = default_leds, | ||
}; | ||
|
||
static struct platform_device rdc321x_leds = { | ||
.name = "leds-gpio", | ||
.id = -1, | ||
.dev = { | ||
.platform_data = &rdc321x_led_data, | ||
} | ||
}; | ||
|
||
/* Watchdog */ | ||
static struct platform_device rdc321x_wdt = { | ||
.name = "rdc321x-wdt", | ||
.id = -1, | ||
.num_resources = 0, | ||
}; | ||
|
||
static struct platform_device *rdc321x_devs[] = { | ||
&rdc321x_leds, | ||
&rdc321x_wdt | ||
}; | ||
|
||
static int __init rdc_board_setup(void) | ||
{ | ||
return platform_add_devices(rdc321x_devs, ARRAY_SIZE(rdc321x_devs)); | ||
} | ||
|
||
arch_initcall(rdc_board_setup); |
Oops, something went wrong.