Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-omap2/board-zoom-debugboard.c
10817 views
1
/*
2
* Copyright (C) 2009 Texas Instruments Inc.
3
* Mikkel Christensen <[email protected]>
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation.
8
*/
9
10
#include <linux/kernel.h>
11
#include <linux/init.h>
12
#include <linux/gpio.h>
13
#include <linux/serial_8250.h>
14
#include <linux/smsc911x.h>
15
#include <linux/interrupt.h>
16
17
#include <plat/gpmc.h>
18
#include <plat/gpmc-smsc911x.h>
19
20
#include <mach/board-zoom.h>
21
22
#define ZOOM_SMSC911X_CS 7
23
#define ZOOM_SMSC911X_GPIO 158
24
#define ZOOM_QUADUART_CS 3
25
#define ZOOM_QUADUART_GPIO 102
26
#define QUART_CLK 1843200
27
#define DEBUG_BASE 0x08000000
28
#define ZOOM_ETHR_START DEBUG_BASE
29
30
static struct omap_smsc911x_platform_data zoom_smsc911x_cfg = {
31
.cs = ZOOM_SMSC911X_CS,
32
.gpio_irq = ZOOM_SMSC911X_GPIO,
33
.gpio_reset = -EINVAL,
34
.flags = SMSC911X_USE_32BIT,
35
};
36
37
static inline void __init zoom_init_smsc911x(void)
38
{
39
gpmc_smsc911x_init(&zoom_smsc911x_cfg);
40
}
41
42
static struct plat_serial8250_port serial_platform_data[] = {
43
{
44
.mapbase = ZOOM_UART_BASE,
45
.irq = OMAP_GPIO_IRQ(102),
46
.flags = UPF_BOOT_AUTOCONF|UPF_IOREMAP|UPF_SHARE_IRQ,
47
.irqflags = IRQF_SHARED | IRQF_TRIGGER_RISING,
48
.iotype = UPIO_MEM,
49
.regshift = 1,
50
.uartclk = QUART_CLK,
51
}, {
52
.flags = 0
53
}
54
};
55
56
static struct platform_device zoom_debugboard_serial_device = {
57
.name = "serial8250",
58
.id = PLAT8250_DEV_PLATFORM,
59
.dev = {
60
.platform_data = serial_platform_data,
61
},
62
};
63
64
static inline void __init zoom_init_quaduart(void)
65
{
66
int quart_cs;
67
unsigned long cs_mem_base;
68
int quart_gpio = 0;
69
70
quart_cs = ZOOM_QUADUART_CS;
71
72
if (gpmc_cs_request(quart_cs, SZ_1M, &cs_mem_base) < 0) {
73
printk(KERN_ERR "Failed to request GPMC mem"
74
"for Quad UART(TL16CP754C)\n");
75
return;
76
}
77
78
quart_gpio = ZOOM_QUADUART_GPIO;
79
80
if (gpio_request_one(quart_gpio, GPIOF_IN, "TL16CP754C GPIO") < 0)
81
printk(KERN_ERR "Failed to request GPIO%d for TL16CP754C\n",
82
quart_gpio);
83
}
84
85
static inline int omap_zoom_debugboard_detect(void)
86
{
87
int debug_board_detect = 0;
88
int ret = 1;
89
90
debug_board_detect = ZOOM_SMSC911X_GPIO;
91
92
if (gpio_request_one(debug_board_detect, GPIOF_IN,
93
"Zoom debug board detect") < 0) {
94
printk(KERN_ERR "Failed to request GPIO%d for Zoom debug"
95
"board detect\n", debug_board_detect);
96
return 0;
97
}
98
99
if (!gpio_get_value(debug_board_detect)) {
100
ret = 0;
101
}
102
gpio_free(debug_board_detect);
103
return ret;
104
}
105
106
static struct platform_device *zoom_devices[] __initdata = {
107
&zoom_debugboard_serial_device,
108
};
109
110
int __init zoom_debugboard_init(void)
111
{
112
if (!omap_zoom_debugboard_detect())
113
return 0;
114
115
zoom_init_smsc911x();
116
zoom_init_quaduart();
117
return platform_add_devices(zoom_devices, ARRAY_SIZE(zoom_devices));
118
}
119
120