You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'pxa-tosa' into pxa
Conflicts: arch/arm/mach-pxa/Kconfig arch/arm/mach-pxa/tosa.c arch/arm/mach-pxa/spitz.c
This commit is contained in:
@@ -584,6 +584,8 @@ L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/TOSA MACHINE SUPPORT
|
ARM/TOSA MACHINE SUPPORT
|
||||||
|
P: Dmitry Baryshkov
|
||||||
|
M: dbaryshkov@gmail.com
|
||||||
P: Dirk Opfer
|
P: Dirk Opfer
|
||||||
M: dirk@opfer-online.de
|
M: dirk@opfer-online.de
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|||||||
@@ -310,4 +310,13 @@ config PXA_PWM
|
|||||||
default BACKLIGHT_PWM
|
default BACKLIGHT_PWM
|
||||||
help
|
help
|
||||||
Enable support for PXA2xx/PXA3xx PWM controllers
|
Enable support for PXA2xx/PXA3xx PWM controllers
|
||||||
|
|
||||||
|
config TOSA_BT
|
||||||
|
tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
|
||||||
|
depends on MACH_TOSA
|
||||||
|
select RFKILL
|
||||||
|
help
|
||||||
|
This is a simple driver that is able to control
|
||||||
|
the state of built in bluetooth chip on tosa.
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
# Common support (must be linked before board specific support)
|
# Common support (must be linked before board specific support)
|
||||||
obj-y += clock.o devices.o generic.o irq.o dma.o \
|
obj-y += clock.o devices.o generic.o irq.o dma.o \
|
||||||
time.o gpio.o
|
time.o gpio.o reset.o
|
||||||
obj-$(CONFIG_PM) += pm.o sleep.o standby.o
|
obj-$(CONFIG_PM) += pm.o sleep.o standby.o
|
||||||
obj-$(CONFIG_CPU_FREQ) += cpu-pxa.o
|
obj-$(CONFIG_CPU_FREQ) += cpu-pxa.o
|
||||||
|
|
||||||
@@ -61,3 +61,5 @@ obj-$(CONFIG_LEDS) += $(led-y)
|
|||||||
ifeq ($(CONFIG_PCI),y)
|
ifeq ($(CONFIG_PCI),y)
|
||||||
obj-$(CONFIG_MACH_ARMCORE) += cm-x270-pci.o
|
obj-$(CONFIG_MACH_ARMCORE) += cm-x270-pci.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
obj-$(CONFIG_TOSA_BT) += tosa-bt.o
|
||||||
|
|||||||
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/proc-fns.h>
|
||||||
|
|
||||||
|
#include <asm/arch/pxa-regs.h>
|
||||||
|
#include <asm/arch/pxa2xx-regs.h>
|
||||||
|
|
||||||
|
static void do_hw_reset(void);
|
||||||
|
|
||||||
|
static int reset_gpio = -1;
|
||||||
|
|
||||||
|
int init_gpio_reset(int gpio)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = gpio_request(gpio, "reset generator");
|
||||||
|
if (rc) {
|
||||||
|
printk(KERN_ERR "Can't request reset_gpio\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = gpio_direction_input(gpio);
|
||||||
|
if (rc) {
|
||||||
|
printk(KERN_ERR "Can't configure reset_gpio for input\n");
|
||||||
|
gpio_free(gpio);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (!rc)
|
||||||
|
reset_gpio = gpio;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Trigger GPIO reset.
|
||||||
|
* This covers various types of logic connecting gpio pin
|
||||||
|
* to RESET pins (nRESET or GPIO_RESET):
|
||||||
|
*/
|
||||||
|
static void do_gpio_reset(void)
|
||||||
|
{
|
||||||
|
BUG_ON(reset_gpio == -1);
|
||||||
|
|
||||||
|
/* drive it low */
|
||||||
|
gpio_direction_output(reset_gpio, 0);
|
||||||
|
mdelay(2);
|
||||||
|
/* rising edge or drive high */
|
||||||
|
gpio_set_value(reset_gpio, 1);
|
||||||
|
mdelay(2);
|
||||||
|
/* falling edge */
|
||||||
|
gpio_set_value(reset_gpio, 0);
|
||||||
|
|
||||||
|
/* give it some time */
|
||||||
|
mdelay(10);
|
||||||
|
|
||||||
|
WARN_ON(1);
|
||||||
|
/* fallback */
|
||||||
|
do_hw_reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void do_hw_reset(void)
|
||||||
|
{
|
||||||
|
/* Initialize the watchdog and let it fire */
|
||||||
|
OWER = OWER_WME;
|
||||||
|
OSSR = OSSR_M3;
|
||||||
|
OSMR3 = OSCR + 368640; /* ... in 100 ms */
|
||||||
|
}
|
||||||
|
|
||||||
|
void arch_reset(char mode)
|
||||||
|
{
|
||||||
|
if (cpu_is_pxa2xx())
|
||||||
|
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case 's':
|
||||||
|
/* Jump into ROM at address 0 */
|
||||||
|
cpu_reset(0);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
do_hw_reset();
|
||||||
|
break;
|
||||||
|
case 'g':
|
||||||
|
do_gpio_reset();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
#include <asm/arch/pxa-regs.h>
|
#include <asm/arch/pxa-regs.h>
|
||||||
#include <asm/arch/pxa2xx-regs.h>
|
#include <asm/arch/pxa2xx-regs.h>
|
||||||
#include <asm/arch/pxa2xx-gpio.h>
|
#include <asm/arch/pxa2xx-gpio.h>
|
||||||
|
#include <asm/arch/pxa27x-udc.h>
|
||||||
#include <asm/arch/irda.h>
|
#include <asm/arch/irda.h>
|
||||||
#include <asm/arch/mmc.h>
|
#include <asm/arch/mmc.h>
|
||||||
#include <asm/arch/ohci.h>
|
#include <asm/arch/ohci.h>
|
||||||
@@ -529,11 +530,7 @@ static struct platform_device *devices[] __initdata = {
|
|||||||
|
|
||||||
static void spitz_poweroff(void)
|
static void spitz_poweroff(void)
|
||||||
{
|
{
|
||||||
pxa_gpio_mode(SPITZ_GPIO_ON_RESET | GPIO_OUT);
|
arm_machine_restart('g');
|
||||||
GPSR(SPITZ_GPIO_ON_RESET) = GPIO_bit(SPITZ_GPIO_ON_RESET);
|
|
||||||
|
|
||||||
mdelay(1000);
|
|
||||||
arm_machine_restart('h');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void spitz_restart(char mode)
|
static void spitz_restart(char mode)
|
||||||
@@ -547,6 +544,7 @@ static void spitz_restart(char mode)
|
|||||||
|
|
||||||
static void __init common_init(void)
|
static void __init common_init(void)
|
||||||
{
|
{
|
||||||
|
init_gpio_reset(SPITZ_GPIO_ON_RESET);
|
||||||
pm_power_off = spitz_poweroff;
|
pm_power_off = spitz_poweroff;
|
||||||
arm_pm_restart = spitz_restart;
|
arm_pm_restart = spitz_restart;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* Bluetooth built-in chip control
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 Dmitry Baryshkov
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/rfkill.h>
|
||||||
|
|
||||||
|
#include <asm/arch/tosa_bt.h>
|
||||||
|
|
||||||
|
static void tosa_bt_on(struct tosa_bt_data *data)
|
||||||
|
{
|
||||||
|
gpio_set_value(data->gpio_reset, 0);
|
||||||
|
gpio_set_value(data->gpio_pwr, 1);
|
||||||
|
gpio_set_value(data->gpio_reset, 1);
|
||||||
|
mdelay(20);
|
||||||
|
gpio_set_value(data->gpio_reset, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void tosa_bt_off(struct tosa_bt_data *data)
|
||||||
|
{
|
||||||
|
gpio_set_value(data->gpio_reset, 1);
|
||||||
|
mdelay(10);
|
||||||
|
gpio_set_value(data->gpio_pwr, 0);
|
||||||
|
gpio_set_value(data->gpio_reset, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tosa_bt_toggle_radio(void *data, enum rfkill_state state)
|
||||||
|
{
|
||||||
|
pr_info("BT_RADIO going: %s\n",
|
||||||
|
state == RFKILL_STATE_ON ? "on" : "off");
|
||||||
|
|
||||||
|
if (state == RFKILL_STATE_ON) {
|
||||||
|
pr_info("TOSA_BT: going ON\n");
|
||||||
|
tosa_bt_on(data);
|
||||||
|
} else {
|
||||||
|
pr_info("TOSA_BT: going OFF\n");
|
||||||
|
tosa_bt_off(data);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tosa_bt_probe(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
struct rfkill *rfk;
|
||||||
|
|
||||||
|
struct tosa_bt_data *data = dev->dev.platform_data;
|
||||||
|
|
||||||
|
rc = gpio_request(data->gpio_reset, "Bluetooth reset");
|
||||||
|
if (rc)
|
||||||
|
goto err_reset;
|
||||||
|
rc = gpio_direction_output(data->gpio_reset, 0);
|
||||||
|
if (rc)
|
||||||
|
goto err_reset_dir;
|
||||||
|
rc = gpio_request(data->gpio_pwr, "Bluetooth power");
|
||||||
|
if (rc)
|
||||||
|
goto err_pwr;
|
||||||
|
rc = gpio_direction_output(data->gpio_pwr, 0);
|
||||||
|
if (rc)
|
||||||
|
goto err_pwr_dir;
|
||||||
|
|
||||||
|
rfk = rfkill_allocate(&dev->dev, RFKILL_TYPE_BLUETOOTH);
|
||||||
|
if (!rfk) {
|
||||||
|
rc = -ENOMEM;
|
||||||
|
goto err_rfk_alloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rfk->name = "tosa-bt";
|
||||||
|
rfk->toggle_radio = tosa_bt_toggle_radio;
|
||||||
|
rfk->data = data;
|
||||||
|
#ifdef CONFIG_RFKILL_LEDS
|
||||||
|
rfk->led_trigger.name = "tosa-bt";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
rc = rfkill_register(rfk);
|
||||||
|
if (rc)
|
||||||
|
goto err_rfkill;
|
||||||
|
|
||||||
|
platform_set_drvdata(dev, rfk);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_rfkill:
|
||||||
|
if (rfk)
|
||||||
|
rfkill_free(rfk);
|
||||||
|
rfk = NULL;
|
||||||
|
err_rfk_alloc:
|
||||||
|
tosa_bt_off(data);
|
||||||
|
err_pwr_dir:
|
||||||
|
gpio_free(data->gpio_pwr);
|
||||||
|
err_pwr:
|
||||||
|
err_reset_dir:
|
||||||
|
gpio_free(data->gpio_reset);
|
||||||
|
err_reset:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __devexit tosa_bt_remove(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
struct tosa_bt_data *data = dev->dev.platform_data;
|
||||||
|
struct rfkill *rfk = platform_get_drvdata(dev);
|
||||||
|
|
||||||
|
platform_set_drvdata(dev, NULL);
|
||||||
|
|
||||||
|
if (rfk)
|
||||||
|
rfkill_unregister(rfk);
|
||||||
|
rfk = NULL;
|
||||||
|
|
||||||
|
tosa_bt_off(data);
|
||||||
|
|
||||||
|
gpio_free(data->gpio_pwr);
|
||||||
|
gpio_free(data->gpio_reset);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_driver tosa_bt_driver = {
|
||||||
|
.probe = tosa_bt_probe,
|
||||||
|
.remove = __devexit_p(tosa_bt_remove),
|
||||||
|
|
||||||
|
.driver = {
|
||||||
|
.name = "tosa-bt",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int __init tosa_bt_init(void)
|
||||||
|
{
|
||||||
|
return platform_driver_register(&tosa_bt_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __exit tosa_bt_exit(void)
|
||||||
|
{
|
||||||
|
platform_driver_unregister(&tosa_bt_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(tosa_bt_init);
|
||||||
|
module_exit(tosa_bt_exit);
|
||||||
+344
-48
File diff suppressed because it is too large
Load Diff
@@ -215,8 +215,6 @@ static int tosakbd_suspend(struct platform_device *dev, pm_message_t state)
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&tosakbd->lock, flags);
|
spin_lock_irqsave(&tosakbd->lock, flags);
|
||||||
PGSR1 = (PGSR1 & ~TOSA_GPIO_LOW_STROBE_BIT);
|
|
||||||
PGSR2 = (PGSR2 & ~TOSA_GPIO_HIGH_STROBE_BIT);
|
|
||||||
tosakbd->suspended = 1;
|
tosakbd->suspended = 1;
|
||||||
spin_unlock_irqrestore(&tosakbd->lock, flags);
|
spin_unlock_irqrestore(&tosakbd->lock, flags);
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
menu "Multifunction device drivers"
|
menu "Multifunction device drivers"
|
||||||
depends on HAS_IOMEM
|
depends on HAS_IOMEM
|
||||||
|
|
||||||
|
config MFD_CORE
|
||||||
|
tristate
|
||||||
|
default n
|
||||||
|
|
||||||
config MFD_SM501
|
config MFD_SM501
|
||||||
tristate "Support for Silicon Motion SM501"
|
tristate "Support for Silicon Motion SM501"
|
||||||
---help---
|
---help---
|
||||||
@@ -38,6 +42,13 @@ config HTC_PASIC3
|
|||||||
HTC Magician devices, respectively. Actual functionality is
|
HTC Magician devices, respectively. Actual functionality is
|
||||||
handled by the leds-pasic3 and ds1wm drivers.
|
handled by the leds-pasic3 and ds1wm drivers.
|
||||||
|
|
||||||
|
config MFD_TC6393XB
|
||||||
|
bool "Support Toshiba TC6393XB"
|
||||||
|
depends on HAVE_GPIO_LIB
|
||||||
|
select MFD_CORE
|
||||||
|
help
|
||||||
|
Support for Toshiba Mobile IO Controller TC6393XB
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "Multimedia Capabilities Port drivers"
|
menu "Multimedia Capabilities Port drivers"
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ obj-$(CONFIG_MFD_ASIC3) += asic3.o
|
|||||||
obj-$(CONFIG_HTC_EGPIO) += htc-egpio.o
|
obj-$(CONFIG_HTC_EGPIO) += htc-egpio.o
|
||||||
obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
|
obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_MFD_TC6393XB) += tc6393xb.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_MFD_CORE) += mfd-core.o
|
||||||
|
|
||||||
obj-$(CONFIG_MCP) += mcp-core.o
|
obj-$(CONFIG_MCP) += mcp-core.o
|
||||||
obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
|
obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
|
||||||
obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
|
obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* drivers/mfd/mfd-core.c
|
||||||
|
*
|
||||||
|
* core MFD support
|
||||||
|
* Copyright (c) 2006 Ian Molton
|
||||||
|
* Copyright (c) 2007,2008 Dmitry Baryshkov
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/mfd/core.h>
|
||||||
|
|
||||||
|
static int mfd_add_device(struct platform_device *parent,
|
||||||
|
const struct mfd_cell *cell,
|
||||||
|
struct resource *mem_base,
|
||||||
|
int irq_base)
|
||||||
|
{
|
||||||
|
struct resource res[cell->num_resources];
|
||||||
|
struct platform_device *pdev;
|
||||||
|
int ret = -ENOMEM;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
pdev = platform_device_alloc(cell->name, parent->id);
|
||||||
|
if (!pdev)
|
||||||
|
goto fail_alloc;
|
||||||
|
|
||||||
|
pdev->dev.parent = &parent->dev;
|
||||||
|
|
||||||
|
ret = platform_device_add_data(pdev,
|
||||||
|
cell, sizeof(struct mfd_cell));
|
||||||
|
if (ret)
|
||||||
|
goto fail_device;
|
||||||
|
|
||||||
|
memzero(res, sizeof(res));
|
||||||
|
for (r = 0; r < cell->num_resources; r++) {
|
||||||
|
res[r].name = cell->resources[r].name;
|
||||||
|
res[r].flags = cell->resources[r].flags;
|
||||||
|
|
||||||
|
/* Find out base to use */
|
||||||
|
if (cell->resources[r].flags & IORESOURCE_MEM) {
|
||||||
|
res[r].parent = mem_base;
|
||||||
|
res[r].start = mem_base->start +
|
||||||
|
cell->resources[r].start;
|
||||||
|
res[r].end = mem_base->start +
|
||||||
|
cell->resources[r].end;
|
||||||
|
} else if (cell->resources[r].flags & IORESOURCE_IRQ) {
|
||||||
|
res[r].start = irq_base +
|
||||||
|
cell->resources[r].start;
|
||||||
|
res[r].end = irq_base +
|
||||||
|
cell->resources[r].end;
|
||||||
|
} else {
|
||||||
|
res[r].parent = cell->resources[r].parent;
|
||||||
|
res[r].start = cell->resources[r].start;
|
||||||
|
res[r].end = cell->resources[r].end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
platform_device_add_resources(pdev, res, cell->num_resources);
|
||||||
|
|
||||||
|
ret = platform_device_add(pdev);
|
||||||
|
if (ret)
|
||||||
|
goto fail_device;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* platform_device_del(pdev); */
|
||||||
|
fail_device:
|
||||||
|
platform_device_put(pdev);
|
||||||
|
fail_alloc:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mfd_add_devices(
|
||||||
|
struct platform_device *parent,
|
||||||
|
const struct mfd_cell *cells, int n_devs,
|
||||||
|
struct resource *mem_base,
|
||||||
|
int irq_base)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < n_devs; i++) {
|
||||||
|
ret = mfd_add_device(parent, cells + i, mem_base, irq_base);
|
||||||
|
if (ret)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
mfd_remove_devices(parent);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(mfd_add_devices);
|
||||||
|
|
||||||
|
static int mfd_remove_devices_fn(struct device *dev, void *unused)
|
||||||
|
{
|
||||||
|
platform_device_unregister(
|
||||||
|
container_of(dev, struct platform_device, dev));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mfd_remove_devices(struct platform_device *parent)
|
||||||
|
{
|
||||||
|
device_for_each_child(&parent->dev, NULL, mfd_remove_devices_fn);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(mfd_remove_devices);
|
||||||
|
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_AUTHOR("Ian Molton, Dmitry Baryshkov");
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -208,6 +208,11 @@ extern void pxa_gpio_set_value(unsigned gpio, int value);
|
|||||||
*/
|
*/
|
||||||
extern unsigned int get_memclk_frequency_10khz(void);
|
extern unsigned int get_memclk_frequency_10khz(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* register GPIO as reset generator
|
||||||
|
*/
|
||||||
|
extern int init_gpio_reset(int gpio);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
|
#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
|
||||||
|
|||||||
@@ -180,6 +180,7 @@
|
|||||||
#define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
|
#define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
|
||||||
#elif defined(CONFIG_ARCH_LUBBOCK) || \
|
#elif defined(CONFIG_ARCH_LUBBOCK) || \
|
||||||
defined(CONFIG_MACH_LOGICPD_PXA270) || \
|
defined(CONFIG_MACH_LOGICPD_PXA270) || \
|
||||||
|
defined(CONFIG_MACH_TOSA) || \
|
||||||
defined(CONFIG_MACH_MAINSTONE) || \
|
defined(CONFIG_MACH_MAINSTONE) || \
|
||||||
defined(CONFIG_MACH_PCM027) || \
|
defined(CONFIG_MACH_PCM027) || \
|
||||||
defined(CONFIG_MACH_MAGICIAN)
|
defined(CONFIG_MACH_MAGICIAN)
|
||||||
|
|||||||
@@ -21,19 +21,4 @@ static inline void arch_idle(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void arch_reset(char mode)
|
void arch_reset(char mode);
|
||||||
{
|
|
||||||
if (cpu_is_pxa2xx())
|
|
||||||
RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
|
|
||||||
|
|
||||||
if (mode == 's') {
|
|
||||||
/* Jump into ROM at address 0 */
|
|
||||||
cpu_reset(0);
|
|
||||||
} else {
|
|
||||||
/* Initialize the watchdog and let it fire */
|
|
||||||
OWER = OWER_WME;
|
|
||||||
OSSR = OSSR_M3;
|
|
||||||
OSMR3 = OSCR + 368640; /* ... in 100 ms */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,21 +25,18 @@
|
|||||||
*/
|
*/
|
||||||
#define TOSA_SCOOP_GPIO_BASE NR_BUILTIN_GPIO
|
#define TOSA_SCOOP_GPIO_BASE NR_BUILTIN_GPIO
|
||||||
#define TOSA_SCOOP_PXA_VCORE1 SCOOP_GPCR_PA11
|
#define TOSA_SCOOP_PXA_VCORE1 SCOOP_GPCR_PA11
|
||||||
#define TOSA_SCOOP_TC6393_REST_IN SCOOP_GPCR_PA12
|
#define TOSA_GPIO_TC6393XB_REST_IN (TOSA_SCOOP_GPIO_BASE + 1)
|
||||||
#define TOSA_GPIO_IR_POWERDWN (TOSA_SCOOP_GPIO_BASE + 2)
|
#define TOSA_GPIO_IR_POWERDWN (TOSA_SCOOP_GPIO_BASE + 2)
|
||||||
#define TOSA_GPIO_SD_WP (TOSA_SCOOP_GPIO_BASE + 3)
|
#define TOSA_GPIO_SD_WP (TOSA_SCOOP_GPIO_BASE + 3)
|
||||||
#define TOSA_GPIO_PWR_ON (TOSA_SCOOP_GPIO_BASE + 4)
|
#define TOSA_GPIO_PWR_ON (TOSA_SCOOP_GPIO_BASE + 4)
|
||||||
#define TOSA_SCOOP_AUD_PWR_ON SCOOP_GPCR_PA16
|
#define TOSA_SCOOP_AUD_PWR_ON SCOOP_GPCR_PA16
|
||||||
#define TOSA_SCOOP_BT_RESET SCOOP_GPCR_PA17
|
#define TOSA_GPIO_BT_RESET (TOSA_SCOOP_GPIO_BASE + 6)
|
||||||
#define TOSA_SCOOP_BT_PWR_EN SCOOP_GPCR_PA18
|
#define TOSA_GPIO_BT_PWR_EN (TOSA_SCOOP_GPIO_BASE + 7)
|
||||||
#define TOSA_SCOOP_AC_IN_OL SCOOP_GPCR_PA19
|
#define TOSA_SCOOP_AC_IN_OL SCOOP_GPCR_PA19
|
||||||
|
|
||||||
/* GPIO Direction 1 : output mode / 0:input mode */
|
/* GPIO Direction 1 : output mode / 0:input mode */
|
||||||
#define TOSA_SCOOP_IO_DIR ( TOSA_SCOOP_PXA_VCORE1 | TOSA_SCOOP_TC6393_REST_IN | \
|
#define TOSA_SCOOP_IO_DIR (TOSA_SCOOP_PXA_VCORE1 | \
|
||||||
TOSA_SCOOP_AUD_PWR_ON |\
|
TOSA_SCOOP_AUD_PWR_ON)
|
||||||
TOSA_SCOOP_BT_RESET | TOSA_SCOOP_BT_PWR_EN )
|
|
||||||
/* GPIO out put level when init 1: Hi */
|
|
||||||
#define TOSA_SCOOP_IO_OUT ( TOSA_SCOOP_TC6393_REST_IN )
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SCOOP2 jacket GPIOs
|
* SCOOP2 jacket GPIOs
|
||||||
@@ -49,16 +46,34 @@
|
|||||||
#define TOSA_GPIO_NOTE_LED (TOSA_SCOOP_JC_GPIO_BASE + 1)
|
#define TOSA_GPIO_NOTE_LED (TOSA_SCOOP_JC_GPIO_BASE + 1)
|
||||||
#define TOSA_GPIO_CHRG_ERR_LED (TOSA_SCOOP_JC_GPIO_BASE + 2)
|
#define TOSA_GPIO_CHRG_ERR_LED (TOSA_SCOOP_JC_GPIO_BASE + 2)
|
||||||
#define TOSA_GPIO_USB_PULLUP (TOSA_SCOOP_JC_GPIO_BASE + 3)
|
#define TOSA_GPIO_USB_PULLUP (TOSA_SCOOP_JC_GPIO_BASE + 3)
|
||||||
#define TOSA_SCOOP_JC_TC6393_SUSPEND SCOOP_GPCR_PA15
|
#define TOSA_GPIO_TC6393XB_SUSPEND (TOSA_SCOOP_JC_GPIO_BASE + 4)
|
||||||
#define TOSA_SCOOP_JC_TC3693_L3V_ON SCOOP_GPCR_PA16
|
#define TOSA_GPIO_TC6393XB_L3V_ON (TOSA_SCOOP_JC_GPIO_BASE + 5)
|
||||||
#define TOSA_SCOOP_JC_WLAN_DETECT SCOOP_GPCR_PA17
|
#define TOSA_SCOOP_JC_WLAN_DETECT SCOOP_GPCR_PA17
|
||||||
#define TOSA_GPIO_WLAN_LED (TOSA_SCOOP_JC_GPIO_BASE + 7)
|
#define TOSA_GPIO_WLAN_LED (TOSA_SCOOP_JC_GPIO_BASE + 7)
|
||||||
#define TOSA_SCOOP_JC_CARD_LIMIT_SEL SCOOP_GPCR_PA19
|
#define TOSA_SCOOP_JC_CARD_LIMIT_SEL SCOOP_GPCR_PA19
|
||||||
|
|
||||||
/* GPIO Direction 1 : output mode / 0:input mode */
|
/* GPIO Direction 1 : output mode / 0:input mode */
|
||||||
#define TOSA_SCOOP_JC_IO_DIR ( \
|
#define TOSA_SCOOP_JC_IO_DIR (TOSA_SCOOP_JC_CARD_LIMIT_SEL)
|
||||||
TOSA_SCOOP_JC_TC6393_SUSPEND | TOSA_SCOOP_JC_TC3693_L3V_ON | \
|
|
||||||
TOSA_SCOOP_JC_CARD_LIMIT_SEL )
|
/*
|
||||||
|
* TC6393XB GPIOs
|
||||||
|
*/
|
||||||
|
#define TOSA_TC6393XB_GPIO_BASE (NR_BUILTIN_GPIO + 2 * 12)
|
||||||
|
#define TOSA_TC6393XB_GPIO(i) (TOSA_TC6393XB_GPIO_BASE + (i))
|
||||||
|
#define TOSA_TC6393XB_GPIO_BIT(gpio) (1 << (gpio - TOSA_TC6393XB_GPIO_BASE))
|
||||||
|
|
||||||
|
#define TOSA_GPIO_TG_ON (TOSA_TC6393XB_GPIO_BASE + 0)
|
||||||
|
#define TOSA_GPIO_L_MUTE (TOSA_TC6393XB_GPIO_BASE + 1)
|
||||||
|
#define TOSA_GPIO_BL_C20MA (TOSA_TC6393XB_GPIO_BASE + 3)
|
||||||
|
#define TOSA_GPIO_CARD_VCC_ON (TOSA_TC6393XB_GPIO_BASE + 4)
|
||||||
|
#define TOSA_GPIO_CHARGE_OFF (TOSA_TC6393XB_GPIO_BASE + 6)
|
||||||
|
#define TOSA_GPIO_CHARGE_OFF_JC (TOSA_TC6393XB_GPIO_BASE + 7)
|
||||||
|
#define TOSA_GPIO_BAT0_V_ON (TOSA_TC6393XB_GPIO_BASE + 9)
|
||||||
|
#define TOSA_GPIO_BAT1_V_ON (TOSA_TC6393XB_GPIO_BASE + 10)
|
||||||
|
#define TOSA_GPIO_BU_CHRG_ON (TOSA_TC6393XB_GPIO_BASE + 11)
|
||||||
|
#define TOSA_GPIO_BAT_SW_ON (TOSA_TC6393XB_GPIO_BASE + 12)
|
||||||
|
#define TOSA_GPIO_BAT0_TH_ON (TOSA_TC6393XB_GPIO_BASE + 14)
|
||||||
|
#define TOSA_GPIO_BAT1_TH_ON (TOSA_TC6393XB_GPIO_BASE + 15)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Timing Generator
|
* Timing Generator
|
||||||
@@ -84,13 +99,13 @@
|
|||||||
#define TOSA_GPIO_JACKET_DETECT (7)
|
#define TOSA_GPIO_JACKET_DETECT (7)
|
||||||
#define TOSA_GPIO_nSD_DETECT (9)
|
#define TOSA_GPIO_nSD_DETECT (9)
|
||||||
#define TOSA_GPIO_nSD_INT (10)
|
#define TOSA_GPIO_nSD_INT (10)
|
||||||
#define TOSA_GPIO_TC6393_CLK (11)
|
#define TOSA_GPIO_TC6393XB_CLK (11)
|
||||||
#define TOSA_GPIO_BAT1_CRG (12)
|
#define TOSA_GPIO_BAT1_CRG (12)
|
||||||
#define TOSA_GPIO_CF_CD (13)
|
#define TOSA_GPIO_CF_CD (13)
|
||||||
#define TOSA_GPIO_BAT0_CRG (14)
|
#define TOSA_GPIO_BAT0_CRG (14)
|
||||||
#define TOSA_GPIO_TC6393_INT (15)
|
#define TOSA_GPIO_TC6393XB_INT (15)
|
||||||
#define TOSA_GPIO_BAT0_LOW (17)
|
#define TOSA_GPIO_BAT0_LOW (17)
|
||||||
#define TOSA_GPIO_TC6393_RDY (18)
|
#define TOSA_GPIO_TC6393XB_RDY (18)
|
||||||
#define TOSA_GPIO_ON_RESET (19)
|
#define TOSA_GPIO_ON_RESET (19)
|
||||||
#define TOSA_GPIO_EAR_IN (20)
|
#define TOSA_GPIO_EAR_IN (20)
|
||||||
#define TOSA_GPIO_CF_IRQ (21) /* CF slot0 Ready */
|
#define TOSA_GPIO_CF_IRQ (21) /* CF slot0 Ready */
|
||||||
@@ -99,6 +114,7 @@
|
|||||||
#define TOSA_GPIO_TP_INT (32) /* Touch Panel pen down interrupt */
|
#define TOSA_GPIO_TP_INT (32) /* Touch Panel pen down interrupt */
|
||||||
#define TOSA_GPIO_JC_CF_IRQ (36) /* CF slot1 Ready */
|
#define TOSA_GPIO_JC_CF_IRQ (36) /* CF slot1 Ready */
|
||||||
#define TOSA_GPIO_BAT_LOCKED (38) /* Battery locked */
|
#define TOSA_GPIO_BAT_LOCKED (38) /* Battery locked */
|
||||||
|
#define TOSA_GPIO_IRDA_TX (47)
|
||||||
#define TOSA_GPIO_TG_SPI_SCLK (81)
|
#define TOSA_GPIO_TG_SPI_SCLK (81)
|
||||||
#define TOSA_GPIO_TG_SPI_CS (82)
|
#define TOSA_GPIO_TG_SPI_CS (82)
|
||||||
#define TOSA_GPIO_TG_SPI_MOSI (83)
|
#define TOSA_GPIO_TG_SPI_MOSI (83)
|
||||||
@@ -137,7 +153,7 @@
|
|||||||
#define TOSA_IRQ_GPIO_BAT1_CRG IRQ_GPIO(TOSA_GPIO_BAT1_CRG)
|
#define TOSA_IRQ_GPIO_BAT1_CRG IRQ_GPIO(TOSA_GPIO_BAT1_CRG)
|
||||||
#define TOSA_IRQ_GPIO_CF_CD IRQ_GPIO(TOSA_GPIO_CF_CD)
|
#define TOSA_IRQ_GPIO_CF_CD IRQ_GPIO(TOSA_GPIO_CF_CD)
|
||||||
#define TOSA_IRQ_GPIO_BAT0_CRG IRQ_GPIO(TOSA_GPIO_BAT0_CRG)
|
#define TOSA_IRQ_GPIO_BAT0_CRG IRQ_GPIO(TOSA_GPIO_BAT0_CRG)
|
||||||
#define TOSA_IRQ_GPIO_TC6393_INT IRQ_GPIO(TOSA_GPIO_TC6393_INT)
|
#define TOSA_IRQ_GPIO_TC6393XB_INT IRQ_GPIO(TOSA_GPIO_TC6393XB_INT)
|
||||||
#define TOSA_IRQ_GPIO_BAT0_LOW IRQ_GPIO(TOSA_GPIO_BAT0_LOW)
|
#define TOSA_IRQ_GPIO_BAT0_LOW IRQ_GPIO(TOSA_GPIO_BAT0_LOW)
|
||||||
#define TOSA_IRQ_GPIO_EAR_IN IRQ_GPIO(TOSA_GPIO_EAR_IN)
|
#define TOSA_IRQ_GPIO_EAR_IN IRQ_GPIO(TOSA_GPIO_EAR_IN)
|
||||||
#define TOSA_IRQ_GPIO_CF_IRQ IRQ_GPIO(TOSA_GPIO_CF_IRQ)
|
#define TOSA_IRQ_GPIO_CF_IRQ IRQ_GPIO(TOSA_GPIO_CF_IRQ)
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Tosa bluetooth built-in chip control.
|
||||||
|
*
|
||||||
|
* Later it may be shared with some other platforms.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 Dmitry Baryshkov
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef TOSA_BT_H
|
||||||
|
#define TOSA_BT_H
|
||||||
|
|
||||||
|
struct tosa_bt_data {
|
||||||
|
int gpio_pwr;
|
||||||
|
int gpio_reset;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#ifndef MFD_CORE_H
|
||||||
|
#define MFD_CORE_H
|
||||||
|
/*
|
||||||
|
* drivers/mfd/mfd-core.h
|
||||||
|
*
|
||||||
|
* core MFD support
|
||||||
|
* Copyright (c) 2006 Ian Molton
|
||||||
|
* Copyright (c) 2007 Dmitry Baryshkov
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This struct describes the MFD part ("cell").
|
||||||
|
* After registration the copy of this structure will become the platform data
|
||||||
|
* of the resulting platform_device
|
||||||
|
*/
|
||||||
|
struct mfd_cell {
|
||||||
|
const char *name;
|
||||||
|
|
||||||
|
int (*enable)(struct platform_device *dev);
|
||||||
|
int (*disable)(struct platform_device *dev);
|
||||||
|
int (*suspend)(struct platform_device *dev);
|
||||||
|
int (*resume)(struct platform_device *dev);
|
||||||
|
|
||||||
|
void *driver_data; /* driver-specific data */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This resources can be specified relatievly to the parent device.
|
||||||
|
* For accessing device you should use resources from device
|
||||||
|
*/
|
||||||
|
int num_resources;
|
||||||
|
const struct resource *resources;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct mfd_cell *
|
||||||
|
mfd_get_cell(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
return (struct mfd_cell *)pdev->dev.platform_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int mfd_add_devices(
|
||||||
|
struct platform_device *parent,
|
||||||
|
const struct mfd_cell *cells, int n_devs,
|
||||||
|
struct resource *mem_base,
|
||||||
|
int irq_base);
|
||||||
|
|
||||||
|
extern void mfd_remove_devices(struct platform_device *parent);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Toshiba TC6393XB SoC support
|
||||||
|
*
|
||||||
|
* Copyright(c) 2005-2006 Chris Humbert
|
||||||
|
* Copyright(c) 2005 Dirk Opfer
|
||||||
|
* Copyright(c) 2005 Ian Molton <spyro@f2s.com>
|
||||||
|
* Copyright(c) 2007 Dmitry Baryshkov
|
||||||
|
*
|
||||||
|
* Based on code written by Sharp/Lineo for 2.4 kernels
|
||||||
|
* Based on locomo.c
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TC6393XB_H
|
||||||
|
#define TC6393XB_H
|
||||||
|
|
||||||
|
/* Also one should provide the CK3P6MI clock */
|
||||||
|
struct tc6393xb_platform_data {
|
||||||
|
u16 scr_pll2cr; /* PLL2 Control */
|
||||||
|
u16 scr_gper; /* GP Enable */
|
||||||
|
u32 scr_gpo_doecr; /* GPO Data OE Control */
|
||||||
|
u32 scr_gpo_dsr; /* GPO Data Set */
|
||||||
|
|
||||||
|
int (*enable)(struct platform_device *dev);
|
||||||
|
int (*disable)(struct platform_device *dev);
|
||||||
|
int (*suspend)(struct platform_device *dev);
|
||||||
|
int (*resume)(struct platform_device *dev);
|
||||||
|
|
||||||
|
int irq_base; /* a base for cascaded irq */
|
||||||
|
int gpio_base;
|
||||||
|
|
||||||
|
struct tmio_nand_data *nand_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Relative to irq_base
|
||||||
|
*/
|
||||||
|
#define IRQ_TC6393_NAND 0
|
||||||
|
#define IRQ_TC6393_MMC 1
|
||||||
|
#define IRQ_TC6393_OHCI 2
|
||||||
|
#define IRQ_TC6393_SERIAL 3
|
||||||
|
#define IRQ_TC6393_FB 4
|
||||||
|
|
||||||
|
#define TC6393XB_NR_IRQS 8
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#ifndef MFD_TMIO_H
|
||||||
|
#define MFD_TMIO_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* data for the NAND controller
|
||||||
|
*/
|
||||||
|
struct tmio_nand_data {
|
||||||
|
struct nand_bbt_descr *badblock_pattern;
|
||||||
|
struct mtd_partition *partition;
|
||||||
|
unsigned int num_partitions;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TMIO_NAND_CONFIG "tmio-nand-config"
|
||||||
|
#define TMIO_NAND_CONTROL "tmio-nand-control"
|
||||||
|
#define TMIO_NAND_IRQ "tmio-nand"
|
||||||
|
|
||||||
|
#endif
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user