-
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.
MIPS: Lantiq: Add platform device support
This patch adds the wrappers for registering our platform devices. Signed-off-by: John Crispin <blogic@openwrt.org> Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/2254/ Patchwork: https://patchwork.linux-mips.org/patch/2360/ Patchwork: https://patchwork.linux-mips.org/patch/2359/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
- Loading branch information
John Crispin
authored and
Ralf Baechle
committed
May 19, 2011
1 parent
3c54473
commit 24aff71
Showing
6 changed files
with
263 additions
and
2 deletions.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
/* | ||
* 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. | ||
* | ||
* Copyright (C) 2010 John Crispin <blogic@openwrt.org> | ||
*/ | ||
|
||
#include <linux/init.h> | ||
#include <linux/module.h> | ||
#include <linux/types.h> | ||
#include <linux/string.h> | ||
#include <linux/kernel.h> | ||
#include <linux/reboot.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/leds.h> | ||
#include <linux/etherdevice.h> | ||
#include <linux/reboot.h> | ||
#include <linux/time.h> | ||
#include <linux/io.h> | ||
#include <linux/gpio.h> | ||
#include <linux/leds.h> | ||
|
||
#include <asm/bootinfo.h> | ||
#include <asm/irq.h> | ||
|
||
#include <lantiq_soc.h> | ||
|
||
#include "devices.h" | ||
|
||
/* nor flash */ | ||
static struct resource ltq_nor_resource = { | ||
.name = "nor", | ||
.start = LTQ_FLASH_START, | ||
.end = LTQ_FLASH_START + LTQ_FLASH_MAX - 1, | ||
.flags = IORESOURCE_MEM, | ||
}; | ||
|
||
static struct platform_device ltq_nor = { | ||
.name = "ltq_nor", | ||
.resource = <q_nor_resource, | ||
.num_resources = 1, | ||
}; | ||
|
||
void __init ltq_register_nor(struct physmap_flash_data *data) | ||
{ | ||
ltq_nor.dev.platform_data = data; | ||
platform_device_register(<q_nor); | ||
} | ||
|
||
/* watchdog */ | ||
static struct resource ltq_wdt_resource = { | ||
.name = "watchdog", | ||
.start = LTQ_WDT_BASE_ADDR, | ||
.end = LTQ_WDT_BASE_ADDR + LTQ_WDT_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
}; | ||
|
||
void __init ltq_register_wdt(void) | ||
{ | ||
platform_device_register_simple("ltq_wdt", 0, <q_wdt_resource, 1); | ||
} | ||
|
||
/* asc ports */ | ||
static struct resource ltq_asc0_resources[] = { | ||
{ | ||
.name = "asc0", | ||
.start = LTQ_ASC0_BASE_ADDR, | ||
.end = LTQ_ASC0_BASE_ADDR + LTQ_ASC_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
IRQ_RES(tx, LTQ_ASC_TIR(0)), | ||
IRQ_RES(rx, LTQ_ASC_RIR(0)), | ||
IRQ_RES(err, LTQ_ASC_EIR(0)), | ||
}; | ||
|
||
static struct resource ltq_asc1_resources[] = { | ||
{ | ||
.name = "asc1", | ||
.start = LTQ_ASC1_BASE_ADDR, | ||
.end = LTQ_ASC1_BASE_ADDR + LTQ_ASC_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
IRQ_RES(tx, LTQ_ASC_TIR(1)), | ||
IRQ_RES(rx, LTQ_ASC_RIR(1)), | ||
IRQ_RES(err, LTQ_ASC_EIR(1)), | ||
}; | ||
|
||
void __init ltq_register_asc(int port) | ||
{ | ||
switch (port) { | ||
case 0: | ||
platform_device_register_simple("ltq_asc", 0, | ||
ltq_asc0_resources, ARRAY_SIZE(ltq_asc0_resources)); | ||
break; | ||
case 1: | ||
platform_device_register_simple("ltq_asc", 1, | ||
ltq_asc1_resources, ARRAY_SIZE(ltq_asc1_resources)); | ||
break; | ||
default: | ||
break; | ||
} | ||
} | ||
|
||
#ifdef CONFIG_PCI | ||
/* pci */ | ||
static struct platform_device ltq_pci = { | ||
.name = "ltq_pci", | ||
.num_resources = 0, | ||
}; | ||
|
||
void __init ltq_register_pci(struct ltq_pci_data *data) | ||
{ | ||
ltq_pci.dev.platform_data = data; | ||
platform_device_register(<q_pci); | ||
} | ||
#else | ||
void __init ltq_register_pci(struct ltq_pci_data *data) | ||
{ | ||
pr_err("kernel is compiled without PCI support\n"); | ||
} | ||
#endif |
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,23 @@ | ||
/* | ||
* 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. | ||
* | ||
* Copyright (C) 2010 John Crispin <blogic@openwrt.org> | ||
*/ | ||
|
||
#ifndef _LTQ_DEVICES_H__ | ||
#define _LTQ_DEVICES_H__ | ||
|
||
#include <lantiq_platform.h> | ||
#include <linux/mtd/physmap.h> | ||
|
||
#define IRQ_RES(resname, irq) \ | ||
{.name = #resname, .start = (irq), .flags = IORESOURCE_IRQ} | ||
|
||
extern void ltq_register_nor(struct physmap_flash_data *data); | ||
extern void ltq_register_wdt(void); | ||
extern void ltq_register_asc(int port); | ||
extern void ltq_register_pci(struct ltq_pci_data *data); | ||
|
||
#endif |
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 |
---|---|---|
@@ -1,4 +1,4 @@ | ||
obj-y := pmu.o ebu.o reset.o gpio.o | ||
obj-y := pmu.o ebu.o reset.o gpio.o devices.o | ||
|
||
obj-$(CONFIG_SOC_XWAY) += clk-xway.o prom-xway.o | ||
obj-$(CONFIG_SOC_AMAZON_SE) += clk-ase.o prom-ase.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,98 @@ | ||
/* | ||
* 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. | ||
* | ||
* Copyright (C) 2010 John Crispin <blogic@openwrt.org> | ||
*/ | ||
|
||
#include <linux/init.h> | ||
#include <linux/module.h> | ||
#include <linux/types.h> | ||
#include <linux/string.h> | ||
#include <linux/mtd/physmap.h> | ||
#include <linux/kernel.h> | ||
#include <linux/reboot.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/leds.h> | ||
#include <linux/etherdevice.h> | ||
#include <linux/reboot.h> | ||
#include <linux/time.h> | ||
#include <linux/io.h> | ||
#include <linux/gpio.h> | ||
#include <linux/leds.h> | ||
|
||
#include <asm/bootinfo.h> | ||
#include <asm/irq.h> | ||
|
||
#include <lantiq_soc.h> | ||
#include <lantiq_irq.h> | ||
#include <lantiq_platform.h> | ||
|
||
#include "devices.h" | ||
|
||
/* gpio */ | ||
static struct resource ltq_gpio_resource[] = { | ||
{ | ||
.name = "gpio0", | ||
.start = LTQ_GPIO0_BASE_ADDR, | ||
.end = LTQ_GPIO0_BASE_ADDR + LTQ_GPIO_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
}, { | ||
.name = "gpio1", | ||
.start = LTQ_GPIO1_BASE_ADDR, | ||
.end = LTQ_GPIO1_BASE_ADDR + LTQ_GPIO_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
}, { | ||
.name = "gpio2", | ||
.start = LTQ_GPIO2_BASE_ADDR, | ||
.end = LTQ_GPIO2_BASE_ADDR + LTQ_GPIO_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
} | ||
}; | ||
|
||
void __init ltq_register_gpio(void) | ||
{ | ||
platform_device_register_simple("ltq_gpio", 0, | ||
<q_gpio_resource[0], 1); | ||
platform_device_register_simple("ltq_gpio", 1, | ||
<q_gpio_resource[1], 1); | ||
|
||
/* AR9 and VR9 have an extra gpio block */ | ||
if (ltq_is_ar9() || ltq_is_vr9()) { | ||
platform_device_register_simple("ltq_gpio", 2, | ||
<q_gpio_resource[2], 1); | ||
} | ||
} | ||
|
||
/* serial to parallel conversion */ | ||
static struct resource ltq_stp_resource = { | ||
.name = "stp", | ||
.start = LTQ_STP_BASE_ADDR, | ||
.end = LTQ_STP_BASE_ADDR + LTQ_STP_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
}; | ||
|
||
void __init ltq_register_gpio_stp(void) | ||
{ | ||
platform_device_register_simple("ltq_stp", 0, <q_stp_resource, 1); | ||
} | ||
|
||
/* asc ports - amazon se has its own serial mapping */ | ||
static struct resource ltq_ase_asc_resources[] = { | ||
{ | ||
.name = "asc0", | ||
.start = LTQ_ASC1_BASE_ADDR, | ||
.end = LTQ_ASC1_BASE_ADDR + LTQ_ASC_SIZE - 1, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
IRQ_RES(tx, LTQ_ASC_ASE_TIR), | ||
IRQ_RES(rx, LTQ_ASC_ASE_RIR), | ||
IRQ_RES(err, LTQ_ASC_ASE_EIR), | ||
}; | ||
|
||
void __init ltq_register_ase_asc(void) | ||
{ | ||
platform_device_register_simple("ltq_asc", 0, | ||
ltq_ase_asc_resources, ARRAY_SIZE(ltq_ase_asc_resources)); | ||
} |
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,18 @@ | ||
/* | ||
* 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. | ||
* | ||
* Copyright (C) 2010 John Crispin <blogic@openwrt.org> | ||
*/ | ||
|
||
#ifndef _LTQ_DEVICES_XWAY_H__ | ||
#define _LTQ_DEVICES_XWAY_H__ | ||
|
||
#include "../devices.h" | ||
|
||
extern void ltq_register_gpio(void); | ||
extern void ltq_register_gpio_stp(void); | ||
extern void ltq_register_ase_asc(void); | ||
|
||
#endif |