15
15
#include <linux/device.h>
16
16
#include <linux/kernel.h>
17
17
#include <linux/notifier.h>
19
18
#include <linux/string.h>
21
#include <mach/gpio-tegra.h>
22
#include <mach/pinmux.h>
24
20
#include "board-pinmux.h"
25
21
#include "devices.h"
27
struct tegra_board_pinmux_conf *confs[2];
29
static void tegra_board_pinmux_setup_gpios(void)
33
for (i = 0; i < ARRAY_SIZE(confs); i++) {
37
tegra_gpio_config(confs[i]->gpios, confs[i]->gpio_count);
41
static void tegra_board_pinmux_setup_pinmux(void)
45
for (i = 0; i < ARRAY_SIZE(confs); i++) {
49
tegra_pinmux_config_table(confs[i]->pgs, confs[i]->pg_count);
52
tegra_drive_pinmux_config_table(confs[i]->drives,
53
confs[i]->drive_count);
57
static int tegra_board_pinmux_bus_notify(struct notifier_block *nb,
58
unsigned long event, void *vdev)
61
static bool had_pinmux;
63
struct device *dev = vdev;
66
if (event != BUS_NOTIFY_BOUND_DRIVER)
69
devname = dev_name(dev);
71
if (!had_gpio && !strcmp(devname, GPIO_DEV)) {
72
tegra_board_pinmux_setup_gpios();
74
} else if (!had_pinmux && !strcmp(devname, PINMUX_DEV)) {
75
tegra_board_pinmux_setup_pinmux();
79
if (had_gpio && had_pinmux)
80
return NOTIFY_STOP_MASK;
85
static struct notifier_block nb = {
86
.notifier_call = tegra_board_pinmux_bus_notify,
23
unsigned long tegra_pincfg_pullnone_driven[2] = {
24
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_NONE),
25
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_DRIVEN),
28
unsigned long tegra_pincfg_pullnone_tristate[2] = {
29
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_NONE),
30
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_TRISTATE),
33
unsigned long tegra_pincfg_pullnone_na[1] = {
34
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_NONE),
37
unsigned long tegra_pincfg_pullup_driven[2] = {
38
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_UP),
39
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_DRIVEN),
42
unsigned long tegra_pincfg_pullup_tristate[2] = {
43
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_UP),
44
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_TRISTATE),
47
unsigned long tegra_pincfg_pullup_na[1] = {
48
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_UP),
51
unsigned long tegra_pincfg_pulldown_driven[2] = {
52
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_DOWN),
53
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_DRIVEN),
56
unsigned long tegra_pincfg_pulldown_tristate[2] = {
57
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_DOWN),
58
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_TRISTATE),
61
unsigned long tegra_pincfg_pulldown_na[1] = {
62
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_PULL, TEGRA_PINCONFIG_PULL_DOWN),
65
unsigned long tegra_pincfg_pullna_driven[1] = {
66
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_DRIVEN),
69
unsigned long tegra_pincfg_pullna_tristate[1] = {
70
TEGRA_PINCONF_PACK(TEGRA_PINCONF_PARAM_TRISTATE, TEGRA_PINCONFIG_TRISTATE),
89
73
static struct platform_device *devices[] = {