Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/mips/ath79/mach-pb44.c
10818 views
1
/*
2
* Atheros PB44 reference board support
3
*
4
* Copyright (C) 2009-2010 Gabor Juhos <[email protected]>
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License version 2 as published
8
* by the Free Software Foundation.
9
*/
10
11
#include <linux/init.h>
12
#include <linux/platform_device.h>
13
#include <linux/i2c.h>
14
#include <linux/i2c-gpio.h>
15
#include <linux/i2c/pcf857x.h>
16
17
#include "machtypes.h"
18
#include "dev-gpio-buttons.h"
19
#include "dev-leds-gpio.h"
20
#include "dev-spi.h"
21
22
#define PB44_GPIO_I2C_SCL 0
23
#define PB44_GPIO_I2C_SDA 1
24
25
#define PB44_GPIO_EXP_BASE 16
26
#define PB44_GPIO_SW_RESET (PB44_GPIO_EXP_BASE + 6)
27
#define PB44_GPIO_SW_JUMP (PB44_GPIO_EXP_BASE + 8)
28
#define PB44_GPIO_LED_JUMP1 (PB44_GPIO_EXP_BASE + 9)
29
#define PB44_GPIO_LED_JUMP2 (PB44_GPIO_EXP_BASE + 10)
30
31
#define PB44_KEYS_POLL_INTERVAL 20 /* msecs */
32
#define PB44_KEYS_DEBOUNCE_INTERVAL (3 * PB44_KEYS_POLL_INTERVAL)
33
34
static struct i2c_gpio_platform_data pb44_i2c_gpio_data = {
35
.sda_pin = PB44_GPIO_I2C_SDA,
36
.scl_pin = PB44_GPIO_I2C_SCL,
37
};
38
39
static struct platform_device pb44_i2c_gpio_device = {
40
.name = "i2c-gpio",
41
.id = 0,
42
.dev = {
43
.platform_data = &pb44_i2c_gpio_data,
44
}
45
};
46
47
static struct pcf857x_platform_data pb44_pcf857x_data = {
48
.gpio_base = PB44_GPIO_EXP_BASE,
49
};
50
51
static struct i2c_board_info pb44_i2c_board_info[] __initdata = {
52
{
53
I2C_BOARD_INFO("pcf8575", 0x20),
54
.platform_data = &pb44_pcf857x_data,
55
},
56
};
57
58
static struct gpio_led pb44_leds_gpio[] __initdata = {
59
{
60
.name = "pb44:amber:jump1",
61
.gpio = PB44_GPIO_LED_JUMP1,
62
.active_low = 1,
63
}, {
64
.name = "pb44:green:jump2",
65
.gpio = PB44_GPIO_LED_JUMP2,
66
.active_low = 1,
67
},
68
};
69
70
static struct gpio_keys_button pb44_gpio_keys[] __initdata = {
71
{
72
.desc = "soft_reset",
73
.type = EV_KEY,
74
.code = KEY_RESTART,
75
.debounce_interval = PB44_KEYS_DEBOUNCE_INTERVAL,
76
.gpio = PB44_GPIO_SW_RESET,
77
.active_low = 1,
78
} , {
79
.desc = "jumpstart",
80
.type = EV_KEY,
81
.code = KEY_WPS_BUTTON,
82
.debounce_interval = PB44_KEYS_DEBOUNCE_INTERVAL,
83
.gpio = PB44_GPIO_SW_JUMP,
84
.active_low = 1,
85
}
86
};
87
88
static struct spi_board_info pb44_spi_info[] = {
89
{
90
.bus_num = 0,
91
.chip_select = 0,
92
.max_speed_hz = 25000000,
93
.modalias = "m25p64",
94
},
95
};
96
97
static struct ath79_spi_platform_data pb44_spi_data = {
98
.bus_num = 0,
99
.num_chipselect = 1,
100
};
101
102
static void __init pb44_init(void)
103
{
104
i2c_register_board_info(0, pb44_i2c_board_info,
105
ARRAY_SIZE(pb44_i2c_board_info));
106
platform_device_register(&pb44_i2c_gpio_device);
107
108
ath79_register_leds_gpio(-1, ARRAY_SIZE(pb44_leds_gpio),
109
pb44_leds_gpio);
110
ath79_register_gpio_keys_polled(-1, PB44_KEYS_POLL_INTERVAL,
111
ARRAY_SIZE(pb44_gpio_keys),
112
pb44_gpio_keys);
113
ath79_register_spi(&pb44_spi_data, pb44_spi_info,
114
ARRAY_SIZE(pb44_spi_info));
115
}
116
117
MIPS_MACHINE(ATH79_MACH_PB44, "PB44", "Atheros PB44 reference board",
118
pb44_init);
119
120