mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 14:43:58 +08:00
Legacy platform_data removal for omaps for v4.10 merge window.
We've dropped the last legacy boot board-*.c files for mach-omap2 for v4.9 so now we can start removing the unused platform_data. All of the below has been unused since v4.9 merge window: - Drop legacy pmic init code - Apply seq_puts() fixes for legacy mux code, then drop it - Drop legacy serial init - Drop legacy i2c init - Drop legacy PM init - Drop legacy twl4030 platform init - Drop legacy USB host init - Drop legacy muxing for tusb6010, n8x0 is still using it's platform init via pdata-quirks.c - Drop legacy musb init - Drop hwmod related legacy mux code - Drop legacy hwmod data for omap3 - Drop legacy smsc911x and smc91x init - Drop legacy board flash init - Drop legacy ads7846 init - Drop legacy sdram timings -----BEGIN PGP SIGNATURE----- iQIuBAABCAAYBQJYK1nqERx0b255QGF0b21pZGUuY29tAAoJEBvUPslcq6Vzt9MP /0mUByIMqhtrJYcb8tpFyzoyM6j4YGbWYLVTD4wzJ+r+CXR3khNHZ+FznbDF3u5U YPTa/l4T8XNg9LVHavEBP6fj2dcM7nEwiL4b8JvtrAx6QCnpImkQCGxUVrmP/t1f WdMzUw6I5T2paMRLAA0uR7rOSrNxKn/sx45LHr3+702lL/sjlfrkQxFwv1C/K8rf Znf3Te4qC+JW4/gZvI+Y0Rgq6KmlIljhYPB/xvbQhjxdOM8gYmnbZizL1LkgMv15 wvRs/S6lJN0fVQp0cAJzTb8G/r0eTgDYsfHZKJWu37l2wfNu42gBvBCb7GFU4hW3 7TVJjDhaDRXxB9z2RvqGJXyt/MjNN1eghDE3u7xgL2+/KdM4SkrMbjWYr6ZeMCVq u/neLGlIAh4gsWs5FKL3uZbJ+e/ElJzB3EKVXxbU8sRvkYyfvIE5jGR8nMcs74X8 x5JnbLh29z82QoTFt+QNSChXN4RA7P9WegtahwAfiTtHkWMZHCn799P1Yo4yW23s r/Ka7kpAt8VfNFUB6EKHBKSQYjM7U0+jyJz1M7wqEZZJMKDcE0gf1WEik/Bw5pqQ YckYsB4SXNEneXQxD17aoSqI2SYsZmfbP9dA9SF5/lSn9JmJrvyCCZbOxZC6i+69 MdnDN7fcfZGz1OTVla+87g/7AQ2Nem8BD77umhvEd8jF =GbYF -----END PGP SIGNATURE----- Merge tag 'omap-for-v4.10/legacy-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/soc Legacy platform_data removal for omaps for v4.10 merge window. We've dropped the last legacy boot board-*.c files for mach-omap2 for v4.9 so now we can start removing the unused platform_data. All of the below has been unused since v4.9 merge window: - Drop legacy pmic init code - Apply seq_puts() fixes for legacy mux code, then drop it - Drop legacy serial init - Drop legacy i2c init - Drop legacy PM init - Drop legacy twl4030 platform init - Drop legacy USB host init - Drop legacy muxing for tusb6010, n8x0 is still using it's platform init via pdata-quirks.c - Drop legacy musb init - Drop hwmod related legacy mux code - Drop legacy hwmod data for omap3 - Drop legacy smsc911x and smc91x init - Drop legacy board flash init - Drop legacy ads7846 init - Drop legacy sdram timings * tag 'omap-for-v4.10/legacy-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: (21 commits) ARM: OMAP2+: Drop legacy sdram timings ARM: OMAP2+: Drop legacy ads7846 init ARM: OMAP2+: Remove legacy board-flash.c ARM: OMAP2+: Remove legacy smsc911x and smc91x GPMC support ARM: OMAP2+: Remove legacy data from hwmod for omap3 ARM: OMAP2+: Remove legacy mux code ARM: OMAP2+: Remove legacy hwmod mux code ARM: OMAP2+: Remove legacy usb-musb.c platform init code ARM: OMAP2+: Remove legacy muxing for usb-tusb6010.c ARM: OMAP2+: Remove legacy usb-host.c platform init code ARM: OMAP2+: Remove legacy twl4030 platform init code ARM: OMAP2+: Remove legacy PM init ARM: OMAP2+: Remove legacy i2c.c platform init code ARM: OMAP2+: Remove legacy serial.c ARM: OMAP2+: mux: Use seq_putc() in omap_mux_dbg_signal_show() ARM: OMAP2+: mux: Replace three seq_printf() calls by seq_puts() ARM: OMAP: kill omap_pmic_init ARM: OMAP2: kill omap2_pmic_init ARM: OMAP3: kill omap3_pmic_init ARM: OMAP3: kill omap3_pmic_get_config and twl_{get,set}_voltage ... Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
6d1e66bb4e
@ -31,6 +31,32 @@ config ARCH_OMAP16XX
|
||||
select ARCH_OMAP_OTG
|
||||
select CPU_ARM926T
|
||||
|
||||
config OMAP_MUX
|
||||
bool "OMAP multiplexing support"
|
||||
depends on ARCH_OMAP
|
||||
default y
|
||||
help
|
||||
Pin multiplexing support for OMAP boards. If your bootloader
|
||||
sets the multiplexing correctly, say N. Otherwise, or if unsure,
|
||||
say Y.
|
||||
|
||||
config OMAP_MUX_DEBUG
|
||||
bool "Multiplexing debug output"
|
||||
depends on OMAP_MUX
|
||||
help
|
||||
Makes the multiplexing functions print out a lot of debug info.
|
||||
This is useful if you want to find out the correct values of the
|
||||
multiplexing registers.
|
||||
|
||||
config OMAP_MUX_WARNINGS
|
||||
bool "Warn about pins the bootloader didn't set up"
|
||||
depends on OMAP_MUX
|
||||
default y
|
||||
help
|
||||
Choose Y here to warn whenever driver initialization logic needs
|
||||
to change the pin multiplexing setup. When there are no warnings
|
||||
printed, it's safe to deselect OMAP_MUX for your product.
|
||||
|
||||
comment "OMAP Board Type"
|
||||
depends on ARCH_OMAP1
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c-omap.h>
|
||||
#include <mach/mux.h>
|
||||
#include "soc.h"
|
||||
@ -91,6 +92,88 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *pdata,
|
||||
return platform_device_register(pdev);
|
||||
}
|
||||
|
||||
#define OMAP_I2C_MAX_CONTROLLERS 4
|
||||
static struct omap_i2c_bus_platform_data i2c_pdata[OMAP_I2C_MAX_CONTROLLERS];
|
||||
|
||||
#define OMAP_I2C_CMDLINE_SETUP (BIT(31))
|
||||
|
||||
/**
|
||||
* omap_i2c_bus_setup - Process command line options for the I2C bus speed
|
||||
* @str: String of options
|
||||
*
|
||||
* This function allow to override the default I2C bus speed for given I2C
|
||||
* bus with a command line option.
|
||||
*
|
||||
* Format: i2c_bus=bus_id,clkrate (in kHz)
|
||||
*
|
||||
* Returns 1 on success, 0 otherwise.
|
||||
*/
|
||||
static int __init omap_i2c_bus_setup(char *str)
|
||||
{
|
||||
int ints[3];
|
||||
|
||||
get_options(str, 3, ints);
|
||||
if (ints[0] < 2 || ints[1] < 1 ||
|
||||
ints[1] > OMAP_I2C_MAX_CONTROLLERS)
|
||||
return 0;
|
||||
i2c_pdata[ints[1] - 1].clkrate = ints[2];
|
||||
i2c_pdata[ints[1] - 1].clkrate |= OMAP_I2C_CMDLINE_SETUP;
|
||||
|
||||
return 1;
|
||||
}
|
||||
__setup("i2c_bus=", omap_i2c_bus_setup);
|
||||
|
||||
/*
|
||||
* Register busses defined in command line but that are not registered with
|
||||
* omap_register_i2c_bus from board initialization code.
|
||||
*/
|
||||
int __init omap_register_i2c_bus_cmdline(void)
|
||||
{
|
||||
int i, err = 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(i2c_pdata); i++)
|
||||
if (i2c_pdata[i].clkrate & OMAP_I2C_CMDLINE_SETUP) {
|
||||
i2c_pdata[i].clkrate &= ~OMAP_I2C_CMDLINE_SETUP;
|
||||
err = omap_i2c_add_bus(&i2c_pdata[i], i + 1);
|
||||
if (err)
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_register_i2c_bus - register I2C bus with device descriptors
|
||||
* @bus_id: bus id counting from number 1
|
||||
* @clkrate: clock rate of the bus in kHz
|
||||
* @info: pointer into I2C device descriptor table or NULL
|
||||
* @len: number of descriptors in the table
|
||||
*
|
||||
* Returns 0 on success or an error code.
|
||||
*/
|
||||
int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
|
||||
struct i2c_board_info const *info,
|
||||
unsigned len)
|
||||
{
|
||||
int err;
|
||||
|
||||
BUG_ON(bus_id < 1 || bus_id > OMAP_I2C_MAX_CONTROLLERS);
|
||||
|
||||
if (info) {
|
||||
err = i2c_register_board_info(bus_id, info, len);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!i2c_pdata[bus_id - 1].clkrate)
|
||||
i2c_pdata[bus_id - 1].clkrate = clkrate;
|
||||
|
||||
i2c_pdata[bus_id - 1].clkrate &= ~OMAP_I2C_CMDLINE_SETUP;
|
||||
|
||||
return omap_i2c_add_bus(&i2c_pdata[bus_id - 1], bus_id);
|
||||
}
|
||||
|
||||
static int __init omap_i2c_cmdline(void)
|
||||
{
|
||||
return omap_register_i2c_bus_cmdline();
|
||||
|
@ -6,7 +6,7 @@ ccflags-y := -I$(srctree)/$(src)/include \
|
||||
-I$(srctree)/arch/arm/plat-omap/include
|
||||
|
||||
# Common support
|
||||
obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o timer.o pm.o \
|
||||
obj-y := id.o io.o control.o devices.o fb.o timer.o pm.o \
|
||||
common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \
|
||||
omap_device.o omap-headsmp.o sram.o drm.o
|
||||
|
||||
@ -63,9 +63,6 @@ obj-$(CONFIG_ARCH_OMAP4) += omap4-restart.o
|
||||
obj-$(CONFIG_SOC_OMAP5) += omap4-restart.o
|
||||
obj-$(CONFIG_SOC_DRA7XX) += omap4-restart.o
|
||||
|
||||
# Pin multiplexing
|
||||
obj-$(CONFIG_ARCH_OMAP3) += mux34xx.o
|
||||
|
||||
# SMS/SDRC
|
||||
obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o
|
||||
# obj-$(CONFIG_ARCH_OMAP3) += sdrc3xxx.o
|
||||
@ -235,26 +232,15 @@ obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o
|
||||
|
||||
# Platform specific device init code
|
||||
|
||||
omap-flash-$(CONFIG_MTD_NAND_OMAP2) := board-flash.o
|
||||
omap-flash-$(CONFIG_MTD_ONENAND_OMAP2) := board-flash.o
|
||||
obj-y += $(omap-flash-y) $(omap-flash-m)
|
||||
|
||||
omap-hsmmc-$(CONFIG_MMC_OMAP_HS) := hsmmc.o
|
||||
obj-y += $(omap-hsmmc-m) $(omap-hsmmc-y)
|
||||
|
||||
obj-y += usb-musb.o
|
||||
obj-y += omap_phy_internal.o
|
||||
|
||||
obj-$(CONFIG_MACH_OMAP2_TUSB6010) += usb-tusb6010.o
|
||||
obj-y += usb-host.o
|
||||
|
||||
onenand-$(CONFIG_MTD_ONENAND_OMAP2) := gpmc-onenand.o
|
||||
obj-y += $(onenand-m) $(onenand-y)
|
||||
|
||||
nand-$(CONFIG_MTD_NAND_OMAP2) := gpmc-nand.o
|
||||
obj-y += $(nand-m) $(nand-y)
|
||||
|
||||
smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
|
||||
obj-y += $(smsc911x-m) $(smsc911x-y)
|
||||
|
||||
obj-y += common-board-devices.o twl-common.o dss-common.o
|
||||
|
@ -1,242 +0,0 @@
|
||||
/*
|
||||
* board-flash.c
|
||||
* Modified from mach-omap2/board-3430sdp-flash.c
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Copyright (C) 2009 Texas Instruments
|
||||
*
|
||||
* Vimal Singh <vimalsingh@ti.com>
|
||||
*
|
||||
* 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/omap-gpmc.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <linux/platform_data/mtd-nand-omap2.h>
|
||||
#include <linux/platform_data/mtd-onenand-omap2.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "common.h"
|
||||
#include "board-flash.h"
|
||||
|
||||
#define REG_FPGA_REV 0x10
|
||||
#define REG_FPGA_DIP_SWITCH_INPUT2 0x60
|
||||
#define MAX_SUPPORTED_GPMC_CONFIG 3
|
||||
|
||||
#define DEBUG_BASE 0x08000000 /* debug board */
|
||||
|
||||
/* various memory sizes */
|
||||
#define FLASH_SIZE_SDPV1 SZ_64M /* NOR flash (64 Meg aligned) */
|
||||
#define FLASH_SIZE_SDPV2 SZ_128M /* NOR flash (256 Meg aligned) */
|
||||
|
||||
static struct physmap_flash_data board_nor_data = {
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct resource board_nor_resource = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device board_nor_device = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &board_nor_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &board_nor_resource,
|
||||
};
|
||||
|
||||
static void
|
||||
__init board_nor_init(struct mtd_partition *nor_parts, u8 nr_parts, u8 cs)
|
||||
{
|
||||
int err;
|
||||
|
||||
board_nor_data.parts = nor_parts;
|
||||
board_nor_data.nr_parts = nr_parts;
|
||||
|
||||
/* Configure start address and size of NOR device */
|
||||
if (omap_rev() >= OMAP3430_REV_ES1_0) {
|
||||
err = gpmc_cs_request(cs, FLASH_SIZE_SDPV2 - 1,
|
||||
(unsigned long *)&board_nor_resource.start);
|
||||
board_nor_resource.end = board_nor_resource.start
|
||||
+ FLASH_SIZE_SDPV2 - 1;
|
||||
} else {
|
||||
err = gpmc_cs_request(cs, FLASH_SIZE_SDPV1 - 1,
|
||||
(unsigned long *)&board_nor_resource.start);
|
||||
board_nor_resource.end = board_nor_resource.start
|
||||
+ FLASH_SIZE_SDPV1 - 1;
|
||||
}
|
||||
if (err < 0) {
|
||||
pr_err("NOR: Can't request GPMC CS\n");
|
||||
return;
|
||||
}
|
||||
if (platform_device_register(&board_nor_device) < 0)
|
||||
pr_err("Unable to register NOR device\n");
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_MTD_ONENAND_OMAP2)
|
||||
static struct omap_onenand_platform_data board_onenand_data = {
|
||||
.dma_channel = -1, /* disable DMA in OMAP OneNAND driver */
|
||||
};
|
||||
|
||||
void
|
||||
__init board_onenand_init(struct mtd_partition *onenand_parts,
|
||||
u8 nr_parts, u8 cs)
|
||||
{
|
||||
board_onenand_data.cs = cs;
|
||||
board_onenand_data.parts = onenand_parts;
|
||||
board_onenand_data.nr_parts = nr_parts;
|
||||
|
||||
gpmc_onenand_init(&board_onenand_data);
|
||||
}
|
||||
#endif /* IS_ENABLED(CONFIG_MTD_ONENAND_OMAP2) */
|
||||
|
||||
#if IS_ENABLED(CONFIG_MTD_NAND_OMAP2)
|
||||
|
||||
/* Note that all values in this struct are in nanoseconds */
|
||||
struct gpmc_timings nand_default_timings[1] = {
|
||||
{
|
||||
.sync_clk = 0,
|
||||
|
||||
.cs_on = 0,
|
||||
.cs_rd_off = 36,
|
||||
.cs_wr_off = 36,
|
||||
|
||||
.we_on = 6,
|
||||
.oe_on = 6,
|
||||
|
||||
.adv_on = 6,
|
||||
.adv_rd_off = 24,
|
||||
.adv_wr_off = 36,
|
||||
|
||||
.we_off = 30,
|
||||
.oe_off = 48,
|
||||
|
||||
.access = 54,
|
||||
.rd_cycle = 72,
|
||||
.wr_cycle = 72,
|
||||
|
||||
.wr_access = 30,
|
||||
.wr_data_mux_bus = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_nand_platform_data board_nand_data;
|
||||
|
||||
void
|
||||
__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs,
|
||||
int nand_type, struct gpmc_timings *gpmc_t)
|
||||
{
|
||||
board_nand_data.cs = cs;
|
||||
board_nand_data.parts = nand_parts;
|
||||
board_nand_data.nr_parts = nr_parts;
|
||||
board_nand_data.devsize = nand_type;
|
||||
|
||||
board_nand_data.ecc_opt = OMAP_ECC_HAM1_CODE_SW;
|
||||
gpmc_nand_init(&board_nand_data, gpmc_t);
|
||||
}
|
||||
#endif /* IS_ENABLED(CONFIG_MTD_NAND_OMAP2) */
|
||||
|
||||
/**
|
||||
* get_gpmc0_type - Reads the FPGA DIP_SWITCH_INPUT_REGISTER2 to get
|
||||
* the various cs values.
|
||||
*/
|
||||
static u8 get_gpmc0_type(void)
|
||||
{
|
||||
u8 cs = 0;
|
||||
void __iomem *fpga_map_addr;
|
||||
|
||||
fpga_map_addr = ioremap(DEBUG_BASE, 4096);
|
||||
if (!fpga_map_addr)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!(readw_relaxed(fpga_map_addr + REG_FPGA_REV)))
|
||||
/* we dont have an DEBUG FPGA??? */
|
||||
/* Depend on #defines!! default to strata boot return param */
|
||||
goto unmap;
|
||||
|
||||
/* S8-DIP-OFF = 1, S8-DIP-ON = 0 */
|
||||
cs = readw_relaxed(fpga_map_addr + REG_FPGA_DIP_SWITCH_INPUT2) & 0xf;
|
||||
|
||||
/* ES2.0 SDP's onwards 4 dip switches are provided for CS */
|
||||
if (omap_rev() >= OMAP3430_REV_ES1_0)
|
||||
/* change (S8-1:4=DS-2:0) to (S8-4:1=DS-2:0) */
|
||||
cs = ((cs & 8) >> 3) | ((cs & 4) >> 1) |
|
||||
((cs & 2) << 1) | ((cs & 1) << 3);
|
||||
else
|
||||
/* change (S8-1:3=DS-2:0) to (S8-3:1=DS-2:0) */
|
||||
cs = ((cs & 4) >> 2) | (cs & 2) | ((cs & 1) << 2);
|
||||
unmap:
|
||||
iounmap(fpga_map_addr);
|
||||
return cs;
|
||||
}
|
||||
|
||||
/**
|
||||
* board_flash_init - Identify devices connected to GPMC and register.
|
||||
*
|
||||
* @return - void.
|
||||
*/
|
||||
void __init board_flash_init(struct flash_partitions partition_info[],
|
||||
char chip_sel_board[][GPMC_CS_NUM], int nand_type)
|
||||
{
|
||||
u8 cs = 0;
|
||||
u8 norcs = GPMC_CS_NUM + 1;
|
||||
u8 nandcs = GPMC_CS_NUM + 1;
|
||||
u8 onenandcs = GPMC_CS_NUM + 1;
|
||||
u8 idx;
|
||||
unsigned char *config_sel = NULL;
|
||||
|
||||
/* REVISIT: Is this return correct idx for 2430 SDP?
|
||||
* for which cs configuration matches for 2430 SDP?
|
||||
*/
|
||||
idx = get_gpmc0_type();
|
||||
if (idx >= MAX_SUPPORTED_GPMC_CONFIG) {
|
||||
pr_err("%s: Invalid chip select: %d\n", __func__, cs);
|
||||
return;
|
||||
}
|
||||
config_sel = (unsigned char *)(chip_sel_board[idx]);
|
||||
|
||||
while (cs < GPMC_CS_NUM) {
|
||||
switch (config_sel[cs]) {
|
||||
case PDC_NOR:
|
||||
if (norcs > GPMC_CS_NUM)
|
||||
norcs = cs;
|
||||
break;
|
||||
case PDC_NAND:
|
||||
if (nandcs > GPMC_CS_NUM)
|
||||
nandcs = cs;
|
||||
break;
|
||||
case PDC_ONENAND:
|
||||
if (onenandcs > GPMC_CS_NUM)
|
||||
onenandcs = cs;
|
||||
break;
|
||||
}
|
||||
cs++;
|
||||
}
|
||||
|
||||
if (norcs > GPMC_CS_NUM)
|
||||
pr_err("NOR: Unable to find configuration in GPMC\n");
|
||||
else
|
||||
board_nor_init(partition_info[0].parts,
|
||||
partition_info[0].nr_parts, norcs);
|
||||
|
||||
if (onenandcs > GPMC_CS_NUM)
|
||||
pr_err("OneNAND: Unable to find configuration in GPMC\n");
|
||||
else
|
||||
board_onenand_init(partition_info[1].parts,
|
||||
partition_info[1].nr_parts, onenandcs);
|
||||
|
||||
if (nandcs > GPMC_CS_NUM)
|
||||
pr_err("NAND: Unable to find configuration in GPMC\n");
|
||||
else
|
||||
board_nand_init(partition_info[2].parts,
|
||||
partition_info[2].nr_parts, nandcs,
|
||||
nand_type, nand_default_timings);
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
/*
|
||||
* board-sdp.h
|
||||
*
|
||||
* Information structures for SDP-specific board config data
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Copyright (C) 2009 Texas Instruments
|
||||
*
|
||||
* 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/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#define PDC_NOR 1
|
||||
#define PDC_NAND 2
|
||||
#define PDC_ONENAND 3
|
||||
#define DBG_MPDB 4
|
||||
|
||||
struct flash_partitions {
|
||||
struct mtd_partition *parts;
|
||||
int nr_parts;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_MTD_NAND_OMAP2) || IS_ENABLED(CONFIG_MTD_ONENAND_OMAP2)
|
||||
extern void board_flash_init(struct flash_partitions [],
|
||||
char chip_sel[][GPMC_CS_NUM], int nand_type);
|
||||
#else
|
||||
static inline void board_flash_init(struct flash_partitions part[],
|
||||
char chip_sel[][GPMC_CS_NUM], int nand_type)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_MTD_NAND_OMAP2)
|
||||
extern void board_nand_init(struct mtd_partition *nand_parts,
|
||||
u8 nr_parts, u8 cs, int nand_type, struct gpmc_timings *gpmc_t);
|
||||
extern struct gpmc_timings nand_default_timings[];
|
||||
#else
|
||||
static inline void board_nand_init(struct mtd_partition *nand_parts,
|
||||
u8 nr_parts, u8 cs, int nand_type, struct gpmc_timings *gpmc_t)
|
||||
{
|
||||
}
|
||||
#define nand_default_timings NULL
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_MTD_ONENAND_OMAP2)
|
||||
extern void board_onenand_init(struct mtd_partition *nand_parts,
|
||||
u8 nr_parts, u8 cs);
|
||||
#else
|
||||
static inline void board_onenand_init(struct mtd_partition *nand_parts,
|
||||
u8 nr_parts, u8 cs)
|
||||
{
|
||||
}
|
||||
#endif
|
@ -1,102 +0,0 @@
|
||||
/*
|
||||
* common-board-devices.c
|
||||
*
|
||||
* Copyright (C) 2011 CompuLab, Ltd.
|
||||
* Author: Mike Rapoport <mike@compulab.co.il>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
|
||||
#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "common-board-devices.h"
|
||||
|
||||
#if IS_ENABLED(CONFIG_TOUCHSCREEN_ADS7846)
|
||||
static struct omap2_mcspi_device_config ads7846_mcspi_config = {
|
||||
.turbo_mode = 0,
|
||||
};
|
||||
|
||||
static struct ads7846_platform_data ads7846_config = {
|
||||
.x_max = 0x0fff,
|
||||
.y_max = 0x0fff,
|
||||
.x_plate_ohms = 180,
|
||||
.pressure_max = 255,
|
||||
.debounce_max = 10,
|
||||
.debounce_tol = 3,
|
||||
.debounce_rep = 1,
|
||||
.gpio_pendown = -EINVAL,
|
||||
.keep_vref_on = 1,
|
||||
};
|
||||
|
||||
static struct spi_board_info ads7846_spi_board_info __initdata = {
|
||||
.modalias = "ads7846",
|
||||
.bus_num = -EINVAL,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 1500000,
|
||||
.controller_data = &ads7846_mcspi_config,
|
||||
.irq = -EINVAL,
|
||||
.platform_data = &ads7846_config,
|
||||
};
|
||||
|
||||
void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
|
||||
struct ads7846_platform_data *board_pdata)
|
||||
{
|
||||
struct spi_board_info *spi_bi = &ads7846_spi_board_info;
|
||||
int err;
|
||||
|
||||
/*
|
||||
* If a board defines get_pendown_state() function, request the pendown
|
||||
* GPIO and set the GPIO debounce time.
|
||||
* If a board does not define the get_pendown_state() function, then
|
||||
* the ads7846 driver will setup the pendown GPIO itself.
|
||||
*/
|
||||
if (board_pdata && board_pdata->get_pendown_state) {
|
||||
err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
|
||||
if (err) {
|
||||
pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (gpio_debounce)
|
||||
gpio_set_debounce(gpio_pendown, gpio_debounce);
|
||||
|
||||
gpio_export(gpio_pendown, 0);
|
||||
}
|
||||
|
||||
spi_bi->bus_num = bus_num;
|
||||
spi_bi->irq = gpio_to_irq(gpio_pendown);
|
||||
|
||||
ads7846_config.gpio_pendown = gpio_pendown;
|
||||
|
||||
if (board_pdata) {
|
||||
board_pdata->gpio_pendown = gpio_pendown;
|
||||
board_pdata->gpio_pendown_debounce = gpio_debounce;
|
||||
spi_bi->platform_data = board_pdata;
|
||||
}
|
||||
|
||||
spi_register_board_info(&ads7846_spi_board_info, 1);
|
||||
}
|
||||
#else
|
||||
void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
|
||||
struct ads7846_platform_data *board_pdata)
|
||||
{
|
||||
}
|
||||
#endif
|
@ -3,15 +3,7 @@
|
||||
|
||||
#include <sound/tlv320aic3x.h>
|
||||
#include <linux/mfd/menelaus.h>
|
||||
#include "twl-common.h"
|
||||
|
||||
#define NAND_BLOCK_SIZE SZ_128K
|
||||
|
||||
struct mtd_partition;
|
||||
struct ads7846_platform_data;
|
||||
|
||||
void omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
|
||||
struct ads7846_platform_data *board_pdata);
|
||||
void *n8x0_legacy_init(void);
|
||||
|
||||
extern struct menelaus_platform_data n8x0_menelaus_platform_data;
|
||||
|
@ -77,15 +77,6 @@ static inline int omap4_pm_init_early(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_OMAP_MUX
|
||||
int omap_mux_late_init(void);
|
||||
#else
|
||||
static inline int omap_mux_late_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void omap2_init_common_infrastructure(void);
|
||||
|
||||
extern void omap_init_time(void);
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "soc.h"
|
||||
#include "common.h"
|
||||
#include "mux.h"
|
||||
#include "control.h"
|
||||
#include "display.h"
|
||||
|
||||
|
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments, Inc..
|
||||
* Author: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: this is a transitional file to help with DT adaptation.
|
||||
* This file will be removed when DSS supports DT.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <linux/platform_data/omapdss.h>
|
||||
#include <video/omap-panel-data.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "dss-common.h"
|
||||
#include "mux.h"
|
||||
#include "display.h"
|
||||
|
@ -1,13 +0,0 @@
|
||||
#ifndef __OMAP_DSS_COMMON__
|
||||
#define __OMAP_DSS_COMMON__
|
||||
|
||||
/*
|
||||
* NOTE: this is a transitional file to help with DT adaptation.
|
||||
* This file will be removed when DSS supports DT.
|
||||
*/
|
||||
|
||||
void __init omap4_panda_display_init_of(void);
|
||||
void __init omap_4430sdp_display_init_of(void);
|
||||
void __init omap3_igep2_display_init_of(void);
|
||||
|
||||
#endif
|
@ -1,100 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-omap2/gpmc-smsc911x.c
|
||||
*
|
||||
* Copyright (C) 2009 Li-Pro.Net
|
||||
* Stephan Linz <linz@li-pro.net>
|
||||
*
|
||||
* Modified from linux/arch/arm/mach-omap2/gpmc-smc91x.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.
|
||||
*/
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/smsc911x.h>
|
||||
|
||||
#include "gpmc.h"
|
||||
#include "gpmc-smsc911x.h"
|
||||
|
||||
static struct resource gpmc_smsc911x_resources[] = {
|
||||
[0] = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config gpmc_smsc911x_config = {
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize smsc911x device connected to the GPMC. Note that we
|
||||
* assume that pin multiplexing is done in the board-*.c file,
|
||||
* or in the bootloader.
|
||||
*/
|
||||
void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *gpmc_cfg)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
unsigned long cs_mem_base;
|
||||
int ret;
|
||||
|
||||
if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {
|
||||
pr_err("Failed to request GPMC mem region\n");
|
||||
return;
|
||||
}
|
||||
|
||||
gpmc_smsc911x_resources[0].start = cs_mem_base + 0x0;
|
||||
gpmc_smsc911x_resources[0].end = cs_mem_base + 0xff;
|
||||
|
||||
if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "smsc911x irq")) {
|
||||
pr_err("Failed to request IRQ GPIO%d\n", gpmc_cfg->gpio_irq);
|
||||
goto free1;
|
||||
}
|
||||
|
||||
gpmc_smsc911x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
|
||||
|
||||
if (gpio_is_valid(gpmc_cfg->gpio_reset)) {
|
||||
ret = gpio_request_one(gpmc_cfg->gpio_reset,
|
||||
GPIOF_OUT_INIT_HIGH, "smsc911x reset");
|
||||
if (ret) {
|
||||
pr_err("Failed to request reset GPIO%d\n",
|
||||
gpmc_cfg->gpio_reset);
|
||||
goto free2;
|
||||
}
|
||||
|
||||
gpio_set_value(gpmc_cfg->gpio_reset, 0);
|
||||
msleep(100);
|
||||
gpio_set_value(gpmc_cfg->gpio_reset, 1);
|
||||
}
|
||||
|
||||
gpmc_smsc911x_config.flags = gpmc_cfg->flags ? : SMSC911X_USE_16BIT;
|
||||
|
||||
pdev = platform_device_register_resndata(NULL, "smsc911x", gpmc_cfg->id,
|
||||
gpmc_smsc911x_resources, ARRAY_SIZE(gpmc_smsc911x_resources),
|
||||
&gpmc_smsc911x_config, sizeof(gpmc_smsc911x_config));
|
||||
if (IS_ERR(pdev)) {
|
||||
pr_err("Unable to register platform device\n");
|
||||
gpio_free(gpmc_cfg->gpio_reset);
|
||||
goto free2;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
free2:
|
||||
gpio_free(gpmc_cfg->gpio_irq);
|
||||
free1:
|
||||
gpmc_cs_free(gpmc_cfg->cs);
|
||||
|
||||
pr_err("Could not initialize smsc911x device\n");
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/plat/gpmc-smsc911x.h
|
||||
*
|
||||
* Copyright (C) 2009 Li-Pro.Net
|
||||
* Stephan Linz <linz@li-pro.net>
|
||||
*
|
||||
* Modified from arch/arm/plat-omap/include/plat/gpmc-smc91x.h
|
||||
*
|
||||
* 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 __ASM_ARCH_OMAP_GPMC_SMSC911X_H__
|
||||
|
||||
struct omap_smsc911x_platform_data {
|
||||
int id;
|
||||
int cs;
|
||||
int gpio_irq;
|
||||
int gpio_reset;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_SMSC911X)
|
||||
|
||||
extern void gpmc_smsc911x_init(struct omap_smsc911x_platform_data *d);
|
||||
|
||||
#else
|
||||
|
||||
static inline void gpmc_smsc911x_init(struct omap_smsc911x_platform_data *d)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
@ -22,7 +22,6 @@
|
||||
#include "omap_device.h"
|
||||
#include "omap-pm.h"
|
||||
|
||||
#include "mux.h"
|
||||
#include "hsmmc.h"
|
||||
#include "control.h"
|
||||
|
||||
@ -147,91 +146,6 @@ static int nop_mmc_set_power(struct device *dev, int power_on, int vdd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void omap_hsmmc_mux(struct omap_hsmmc_platform_data
|
||||
*mmc_controller, int controller_nr)
|
||||
{
|
||||
if (gpio_is_valid(mmc_controller->gpio_cd) &&
|
||||
(mmc_controller->gpio_cd < OMAP_MAX_GPIO_LINES))
|
||||
omap_mux_init_gpio(mmc_controller->gpio_cd,
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
if (gpio_is_valid(mmc_controller->gpio_cod) &&
|
||||
(mmc_controller->gpio_cod < OMAP_MAX_GPIO_LINES))
|
||||
omap_mux_init_gpio(mmc_controller->gpio_cod,
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
if (gpio_is_valid(mmc_controller->gpio_wp) &&
|
||||
(mmc_controller->gpio_wp < OMAP_MAX_GPIO_LINES))
|
||||
omap_mux_init_gpio(mmc_controller->gpio_wp,
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
if (cpu_is_omap34xx()) {
|
||||
if (controller_nr == 0) {
|
||||
omap_mux_init_signal("sdmmc1_clk",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc1_cmd",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc1_dat0",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
if (mmc_controller->caps &
|
||||
(MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)) {
|
||||
omap_mux_init_signal("sdmmc1_dat1",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc1_dat2",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc1_dat3",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
}
|
||||
if (mmc_controller->caps &
|
||||
MMC_CAP_8_BIT_DATA) {
|
||||
omap_mux_init_signal("sdmmc1_dat4",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc1_dat5",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc1_dat6",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc1_dat7",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
}
|
||||
}
|
||||
if (controller_nr == 1) {
|
||||
/* MMC2 */
|
||||
omap_mux_init_signal("sdmmc2_clk",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc2_cmd",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc2_dat0",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
|
||||
/*
|
||||
* For 8 wire configurations, Lines DAT4, 5, 6 and 7
|
||||
* need to be muxed in the board-*.c files
|
||||
*/
|
||||
if (mmc_controller->caps &
|
||||
(MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)) {
|
||||
omap_mux_init_signal("sdmmc2_dat1",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc2_dat2",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc2_dat3",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
}
|
||||
if (mmc_controller->caps &
|
||||
MMC_CAP_8_BIT_DATA) {
|
||||
omap_mux_init_signal("sdmmc2_dat4.sdmmc2_dat4",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc2_dat5.sdmmc2_dat5",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc2_dat6.sdmmc2_dat6",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("sdmmc2_dat7.sdmmc2_dat7",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* For MMC3 the pins need to be muxed in the board-*.c files
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
||||
struct omap_hsmmc_platform_data *mmc)
|
||||
{
|
||||
@ -410,8 +324,6 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
|
||||
if (res < 0)
|
||||
goto free_mmc;
|
||||
|
||||
omap_hsmmc_mux(mmc_data, (ctrl_nr - 1));
|
||||
|
||||
name = "omap_hsmmc";
|
||||
res = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN,
|
||||
"mmc%d", ctrl_nr);
|
||||
|
@ -26,7 +26,6 @@
|
||||
|
||||
#include "prm.h"
|
||||
#include "common.h"
|
||||
#include "mux.h"
|
||||
#include "i2c.h"
|
||||
|
||||
/* In register I2C_CON, Bit 15 is the I2C enable bit */
|
||||
@ -36,20 +35,6 @@
|
||||
|
||||
#define MAX_OMAP_I2C_HWMOD_NAME_LEN 16
|
||||
|
||||
static void __init omap2_i2c_mux_pins(int bus_id)
|
||||
{
|
||||
char mux_name[sizeof("i2c2_scl.i2c2_scl")];
|
||||
|
||||
/* First I2C bus is not muxable */
|
||||
if (bus_id == 1)
|
||||
return;
|
||||
|
||||
sprintf(mux_name, "i2c%i_scl.i2c%i_scl", bus_id, bus_id);
|
||||
omap_mux_init_signal(mux_name, OMAP_PIN_INPUT);
|
||||
sprintf(mux_name, "i2c%i_sda.i2c%i_sda", bus_id, bus_id);
|
||||
omap_mux_init_signal(mux_name, OMAP_PIN_INPUT);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_i2c_reset - reset the omap i2c module.
|
||||
* @oh: struct omap_hwmod *
|
||||
@ -107,85 +92,3 @@ int omap_i2c_reset(struct omap_hwmod *oh)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init omap_i2c_nr_ports(void)
|
||||
{
|
||||
int ports = 0;
|
||||
|
||||
if (cpu_is_omap24xx())
|
||||
ports = 2;
|
||||
else if (cpu_is_omap34xx())
|
||||
ports = 3;
|
||||
else if (cpu_is_omap44xx())
|
||||
ports = 4;
|
||||
return ports;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX This function is a temporary compatibility wrapper - only
|
||||
* needed until the I2C driver can be converted to call
|
||||
* omap_pm_set_max_dev_wakeup_lat() and handle a return code.
|
||||
*/
|
||||
static void omap_pm_set_max_mpu_wakeup_lat_compat(struct device *dev, long t)
|
||||
{
|
||||
omap_pm_set_max_mpu_wakeup_lat(dev, t);
|
||||
}
|
||||
|
||||
static const char name[] = "omap_i2c";
|
||||
|
||||
int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,
|
||||
int bus_id)
|
||||
{
|
||||
int l;
|
||||
struct omap_hwmod *oh;
|
||||
struct platform_device *pdev;
|
||||
char oh_name[MAX_OMAP_I2C_HWMOD_NAME_LEN];
|
||||
struct omap_i2c_bus_platform_data *pdata;
|
||||
struct omap_i2c_dev_attr *dev_attr;
|
||||
|
||||
if (bus_id > omap_i2c_nr_ports())
|
||||
return -EINVAL;
|
||||
|
||||
omap2_i2c_mux_pins(bus_id);
|
||||
|
||||
l = snprintf(oh_name, MAX_OMAP_I2C_HWMOD_NAME_LEN, "i2c%d", bus_id);
|
||||
WARN(l >= MAX_OMAP_I2C_HWMOD_NAME_LEN,
|
||||
"String buffer overflow in I2C%d device setup\n", bus_id);
|
||||
oh = omap_hwmod_lookup(oh_name);
|
||||
if (!oh) {
|
||||
pr_err("Could not look up %s\n", oh_name);
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
pdata = i2c_pdata;
|
||||
/*
|
||||
* pass the hwmod class's CPU-specific knowledge of I2C IP revision in
|
||||
* use, and functionality implementation flags, up to the OMAP I2C
|
||||
* driver via platform data
|
||||
*/
|
||||
pdata->rev = oh->class->rev;
|
||||
|
||||
dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr;
|
||||
pdata->flags = dev_attr->flags;
|
||||
|
||||
/*
|
||||
* When waiting for completion of a i2c transfer, we need to
|
||||
* set a wake up latency constraint for the MPU. This is to
|
||||
* ensure quick enough wakeup from idle, when transfer
|
||||
* completes.
|
||||
* Only omap3 has support for constraints
|
||||
*/
|
||||
if (cpu_is_omap34xx())
|
||||
pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat;
|
||||
pdev = omap_device_build(name, bus_id, oh, pdata,
|
||||
sizeof(struct omap_i2c_bus_platform_data));
|
||||
WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name);
|
||||
|
||||
return PTR_ERR_OR_ZERO(pdev);
|
||||
}
|
||||
|
||||
static int __init omap_i2c_cmdline(void)
|
||||
{
|
||||
return omap_register_i2c_bus_cmdline();
|
||||
}
|
||||
omap_subsys_initcall(omap_i2c_cmdline);
|
||||
|
@ -427,7 +427,6 @@ static void __init omap_hwmod_init_postsetup(void)
|
||||
|
||||
static void __init __maybe_unused omap_common_late_init(void)
|
||||
{
|
||||
omap_mux_late_init();
|
||||
omap2_common_pm_late_init();
|
||||
omap_soc_device_init();
|
||||
}
|
||||
|
@ -30,7 +30,6 @@
|
||||
#include "control.h"
|
||||
#include "omap_hwmod.h"
|
||||
#include "omap_device.h"
|
||||
#include "mux.h"
|
||||
#include "mmc.h"
|
||||
|
||||
/*
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,352 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2009 Nokia
|
||||
* Copyright (C) 2009-2010 Texas Instruments
|
||||
*
|
||||
* 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 "mux34xx.h"
|
||||
|
||||
#define OMAP_MUX_TERMINATOR 0xffff
|
||||
|
||||
/* 34xx mux mode options for each pin. See TRM for options */
|
||||
#define OMAP_MUX_MODE0 0
|
||||
#define OMAP_MUX_MODE1 1
|
||||
#define OMAP_MUX_MODE2 2
|
||||
#define OMAP_MUX_MODE3 3
|
||||
#define OMAP_MUX_MODE4 4
|
||||
#define OMAP_MUX_MODE5 5
|
||||
#define OMAP_MUX_MODE6 6
|
||||
#define OMAP_MUX_MODE7 7
|
||||
|
||||
/* 24xx/34xx mux bit defines */
|
||||
#define OMAP_PULL_ENA (1 << 3)
|
||||
#define OMAP_PULL_UP (1 << 4)
|
||||
#define OMAP_ALTELECTRICALSEL (1 << 5)
|
||||
|
||||
/* omap3/4/5 specific mux bit defines */
|
||||
#define OMAP_INPUT_EN (1 << 8)
|
||||
#define OMAP_OFF_EN (1 << 9)
|
||||
#define OMAP_OFFOUT_EN (1 << 10)
|
||||
#define OMAP_OFFOUT_VAL (1 << 11)
|
||||
#define OMAP_OFF_PULL_EN (1 << 12)
|
||||
#define OMAP_OFF_PULL_UP (1 << 13)
|
||||
#define OMAP_WAKEUP_EN (1 << 14)
|
||||
#define OMAP_WAKEUP_EVENT (1 << 15)
|
||||
|
||||
/* Active pin states */
|
||||
#define OMAP_PIN_OUTPUT 0
|
||||
#define OMAP_PIN_INPUT OMAP_INPUT_EN
|
||||
#define OMAP_PIN_INPUT_PULLUP (OMAP_PULL_ENA | OMAP_INPUT_EN \
|
||||
| OMAP_PULL_UP)
|
||||
#define OMAP_PIN_INPUT_PULLDOWN (OMAP_PULL_ENA | OMAP_INPUT_EN)
|
||||
|
||||
/* Off mode states */
|
||||
#define OMAP_PIN_OFF_NONE 0
|
||||
#define OMAP_PIN_OFF_OUTPUT_HIGH (OMAP_OFF_EN | OMAP_OFFOUT_EN \
|
||||
| OMAP_OFFOUT_VAL)
|
||||
#define OMAP_PIN_OFF_OUTPUT_LOW (OMAP_OFF_EN | OMAP_OFFOUT_EN)
|
||||
#define OMAP_PIN_OFF_INPUT_PULLUP (OMAP_OFF_EN | OMAP_OFF_PULL_EN \
|
||||
| OMAP_OFF_PULL_UP)
|
||||
#define OMAP_PIN_OFF_INPUT_PULLDOWN (OMAP_OFF_EN | OMAP_OFF_PULL_EN)
|
||||
#define OMAP_PIN_OFF_WAKEUPENABLE OMAP_WAKEUP_EN
|
||||
|
||||
#define OMAP_MODE_GPIO(partition, x) (((x) & OMAP_MUX_MODE7) == \
|
||||
partition->gpio)
|
||||
#define OMAP_MODE_UART(x) (((x) & OMAP_MUX_MODE7) == OMAP_MUX_MODE0)
|
||||
|
||||
/* Flags for omapX_mux_init */
|
||||
#define OMAP_PACKAGE_MASK 0xffff
|
||||
#define OMAP_PACKAGE_CBP 6 /* 515-pin 0.40 0.50 */
|
||||
#define OMAP_PACKAGE_CUS 5 /* 423-pin 0.65 */
|
||||
#define OMAP_PACKAGE_CBB 4 /* 515-pin 0.40 0.50 */
|
||||
#define OMAP_PACKAGE_CBC 3 /* 515-pin 0.50 0.65 */
|
||||
|
||||
#define OMAP_MUX_NR_MODES 8 /* Available modes */
|
||||
#define OMAP_MUX_NR_SIDES 2 /* Bottom & top */
|
||||
|
||||
/*
|
||||
* omap_mux_init flags definition:
|
||||
*
|
||||
* OMAP_GPIO_MUX_MODE, bits 0-2: gpio muxing mode, same like pad control
|
||||
* register which includes values from 0-7.
|
||||
* OMAP_MUX_REG_8BIT: Ensure that access to padconf is done in 8 bits.
|
||||
* The default value is 16 bits.
|
||||
*/
|
||||
#define OMAP_MUX_GPIO_IN_MODE0 OMAP_MUX_MODE0
|
||||
#define OMAP_MUX_GPIO_IN_MODE1 OMAP_MUX_MODE1
|
||||
#define OMAP_MUX_GPIO_IN_MODE2 OMAP_MUX_MODE2
|
||||
#define OMAP_MUX_GPIO_IN_MODE3 OMAP_MUX_MODE3
|
||||
#define OMAP_MUX_GPIO_IN_MODE4 OMAP_MUX_MODE4
|
||||
#define OMAP_MUX_GPIO_IN_MODE5 OMAP_MUX_MODE5
|
||||
#define OMAP_MUX_GPIO_IN_MODE6 OMAP_MUX_MODE6
|
||||
#define OMAP_MUX_GPIO_IN_MODE7 OMAP_MUX_MODE7
|
||||
#define OMAP_MUX_REG_8BIT (1 << 3)
|
||||
|
||||
/**
|
||||
* struct omap_board_data - board specific device data
|
||||
* @id: instance id
|
||||
* @flags: additional flags for platform init code
|
||||
* @pads: array of device specific pads
|
||||
* @pads_cnt: ARRAY_SIZE() of pads
|
||||
*/
|
||||
struct omap_board_data {
|
||||
int id;
|
||||
u32 flags;
|
||||
struct omap_device_pad *pads;
|
||||
int pads_cnt;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mux_partition - contain partition related information
|
||||
* @name: name of the current partition
|
||||
* @flags: flags specific to this partition
|
||||
* @gpio: gpio mux mode
|
||||
* @phys: physical address
|
||||
* @size: partition size
|
||||
* @base: virtual address after ioremap
|
||||
* @muxmodes: list of nodes that belong to a partition
|
||||
* @node: list node for the partitions linked list
|
||||
*/
|
||||
struct omap_mux_partition {
|
||||
const char *name;
|
||||
u32 flags;
|
||||
u32 gpio;
|
||||
u32 phys;
|
||||
u32 size;
|
||||
void __iomem *base;
|
||||
struct list_head muxmodes;
|
||||
struct list_head node;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_mux - data for omap mux register offset and it's value
|
||||
* @reg_offset: mux register offset from the mux base
|
||||
* @gpio: GPIO number
|
||||
* @muxnames: available signal modes for a ball
|
||||
* @balls: available balls on the package
|
||||
*/
|
||||
struct omap_mux {
|
||||
u16 reg_offset;
|
||||
u16 gpio;
|
||||
#ifdef CONFIG_OMAP_MUX
|
||||
char *muxnames[OMAP_MUX_NR_MODES];
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
char *balls[OMAP_MUX_NR_SIDES];
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_ball - data for balls on omap package
|
||||
* @reg_offset: mux register offset from the mux base
|
||||
* @balls: available balls on the package
|
||||
*/
|
||||
struct omap_ball {
|
||||
u16 reg_offset;
|
||||
char *balls[OMAP_MUX_NR_SIDES];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_board_mux - data for initializing mux registers
|
||||
* @reg_offset: mux register offset from the mux base
|
||||
* @mux_value: desired mux value to set
|
||||
*/
|
||||
struct omap_board_mux {
|
||||
u16 reg_offset;
|
||||
u16 value;
|
||||
};
|
||||
|
||||
#define OMAP_DEVICE_PAD_REMUX BIT(1) /* Dynamically remux a pad,
|
||||
needs enable, idle and off
|
||||
values */
|
||||
#define OMAP_DEVICE_PAD_WAKEUP BIT(0) /* Pad is wake-up capable */
|
||||
|
||||
/**
|
||||
* struct omap_device_pad - device specific pad configuration
|
||||
* @name: signal name
|
||||
* @flags: pad specific runtime flags
|
||||
* @enable: runtime value for a pad
|
||||
* @idle: idle value for a pad
|
||||
* @off: off value for a pad, defaults to safe mode
|
||||
* @partition: mux partition
|
||||
* @mux: mux register
|
||||
*/
|
||||
struct omap_device_pad {
|
||||
char *name;
|
||||
u8 flags;
|
||||
u16 enable;
|
||||
u16 idle;
|
||||
u16 off;
|
||||
struct omap_mux_partition *partition;
|
||||
struct omap_mux *mux;
|
||||
};
|
||||
|
||||
struct omap_hwmod_mux_info;
|
||||
|
||||
#define OMAP_MUX_STATIC(signal, mode) \
|
||||
{ \
|
||||
.name = (signal), \
|
||||
.enable = (mode), \
|
||||
}
|
||||
|
||||
#if defined(CONFIG_OMAP_MUX)
|
||||
|
||||
/**
|
||||
* omap_mux_init_gpio - initialize a signal based on the GPIO number
|
||||
* @gpio: GPIO number
|
||||
* @val: Options for the mux register value
|
||||
*/
|
||||
int omap_mux_init_gpio(int gpio, int val);
|
||||
|
||||
/**
|
||||
* omap_mux_init_signal - initialize a signal based on the signal name
|
||||
* @muxname: Mux name in mode0_name.signal_name format
|
||||
* @val: Options for the mux register value
|
||||
*/
|
||||
int omap_mux_init_signal(const char *muxname, int val);
|
||||
|
||||
/**
|
||||
* omap_hwmod_mux_init - initialize hwmod specific mux data
|
||||
* @bpads: Board specific device signal names
|
||||
* @nr_pads: Number of signal names for the device
|
||||
*/
|
||||
extern struct omap_hwmod_mux_info *
|
||||
omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);
|
||||
|
||||
/**
|
||||
* omap_hwmod_mux - omap hwmod specific pin muxing
|
||||
* @hmux: Pads for a hwmod
|
||||
* @state: Desired _HWMOD_STATE
|
||||
*
|
||||
* Called only from omap_hwmod.c, do not use.
|
||||
*/
|
||||
void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
|
||||
|
||||
int omap_mux_get_by_name(const char *muxname,
|
||||
struct omap_mux_partition **found_partition,
|
||||
struct omap_mux **found_mux);
|
||||
#else
|
||||
|
||||
static inline int omap_mux_get_by_name(const char *muxname,
|
||||
struct omap_mux_partition **found_partition,
|
||||
struct omap_mux **found_mux)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int omap_mux_init_gpio(int gpio, int val)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int omap_mux_init_signal(char *muxname, int val)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct omap_hwmod_mux_info *
|
||||
omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
|
||||
{
|
||||
}
|
||||
|
||||
static struct omap_board_mux *board_mux __maybe_unused;
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* omap_mux_get_gpio() - get mux register value based on GPIO number
|
||||
* @gpio: GPIO number
|
||||
*
|
||||
*/
|
||||
u16 omap_mux_get_gpio(int gpio);
|
||||
|
||||
/**
|
||||
* omap_mux_set_gpio() - set mux register value based on GPIO number
|
||||
* @val: New mux register value
|
||||
* @gpio: GPIO number
|
||||
*
|
||||
*/
|
||||
void omap_mux_set_gpio(u16 val, int gpio);
|
||||
|
||||
/**
|
||||
* omap_mux_get() - get a mux partition by name
|
||||
* @name: Name of the mux partition
|
||||
*
|
||||
*/
|
||||
struct omap_mux_partition *omap_mux_get(const char *name);
|
||||
|
||||
/**
|
||||
* omap_mux_read() - read mux register
|
||||
* @partition: Mux partition
|
||||
* @mux_offset: Offset of the mux register
|
||||
*
|
||||
*/
|
||||
u16 omap_mux_read(struct omap_mux_partition *p, u16 mux_offset);
|
||||
|
||||
/**
|
||||
* omap_mux_write() - write mux register
|
||||
* @partition: Mux partition
|
||||
* @val: New mux register value
|
||||
* @mux_offset: Offset of the mux register
|
||||
*
|
||||
* This should be only needed for dynamic remuxing of non-gpio signals.
|
||||
*/
|
||||
void omap_mux_write(struct omap_mux_partition *p, u16 val, u16 mux_offset);
|
||||
|
||||
/**
|
||||
* omap_mux_write_array() - write an array of mux registers
|
||||
* @partition: Mux partition
|
||||
* @board_mux: Array of mux registers terminated by MAP_MUX_TERMINATOR
|
||||
*
|
||||
* This should be only needed for dynamic remuxing of non-gpio signals.
|
||||
*/
|
||||
void omap_mux_write_array(struct omap_mux_partition *p,
|
||||
struct omap_board_mux *board_mux);
|
||||
|
||||
/**
|
||||
* omap2420_mux_init() - initialize mux system with board specific set
|
||||
* @board_mux: Board specific mux table
|
||||
* @flags: OMAP package type used for the board
|
||||
*/
|
||||
int omap2420_mux_init(struct omap_board_mux *board_mux, int flags);
|
||||
|
||||
/**
|
||||
* omap2430_mux_init() - initialize mux system with board specific set
|
||||
* @board_mux: Board specific mux table
|
||||
* @flags: OMAP package type used for the board
|
||||
*/
|
||||
int omap2430_mux_init(struct omap_board_mux *board_mux, int flags);
|
||||
|
||||
/**
|
||||
* omap3_mux_init() - initialize mux system with board specific set
|
||||
* @board_mux: Board specific mux table
|
||||
* @flags: OMAP package type used for the board
|
||||
*/
|
||||
int omap3_mux_init(struct omap_board_mux *board_mux, int flags);
|
||||
|
||||
/**
|
||||
* omap4_mux_init() - initialize mux system with board specific set
|
||||
* @board_subset: Board specific mux table
|
||||
* @board_wkup_subset: Board specific mux table for wakeup instance
|
||||
* @flags: OMAP package type used for the board
|
||||
*/
|
||||
int omap4_mux_init(struct omap_board_mux *board_subset,
|
||||
struct omap_board_mux *board_wkup_subset, int flags);
|
||||
|
||||
/**
|
||||
* omap_mux_init - private mux init function, do not call
|
||||
*/
|
||||
int omap_mux_init(const char *name, u32 flags,
|
||||
u32 mux_pbase, u32 mux_size,
|
||||
struct omap_mux *superset,
|
||||
struct omap_mux *package_subset,
|
||||
struct omap_board_mux *board_mux,
|
||||
struct omap_ball *package_balls);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,402 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2009 Nokia
|
||||
* Copyright (C) 2009 Texas Instruments
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#define OMAP3_CONTROL_PADCONF_MUX_PBASE 0x48002030LU
|
||||
|
||||
#define OMAP3_MUX(mode0, mux_value) \
|
||||
{ \
|
||||
.reg_offset = (OMAP3_CONTROL_PADCONF_##mode0##_OFFSET), \
|
||||
.value = (mux_value), \
|
||||
}
|
||||
|
||||
/*
|
||||
* OMAP3 CONTROL_PADCONF* register offsets for pin-muxing
|
||||
*
|
||||
* Extracted from the TRM. Add 0x48002030 to these values to get the
|
||||
* absolute addresses. The name in the macro is the mode-0 name of
|
||||
* the pin. NOTE: These registers are 16-bits wide.
|
||||
*
|
||||
* Note that 34XX TRM uses MMC instead of SDMMC and SAD2D instead
|
||||
* of CHASSIS for some registers. For the defines, we follow the
|
||||
* 36XX naming, and use SDMMC and CHASSIS.
|
||||
*/
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D0_OFFSET 0x000
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D1_OFFSET 0x002
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D2_OFFSET 0x004
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D3_OFFSET 0x006
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D4_OFFSET 0x008
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D5_OFFSET 0x00a
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D6_OFFSET 0x00c
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D7_OFFSET 0x00e
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D8_OFFSET 0x010
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D9_OFFSET 0x012
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D10_OFFSET 0x014
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D11_OFFSET 0x016
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D12_OFFSET 0x018
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D13_OFFSET 0x01a
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D14_OFFSET 0x01c
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D15_OFFSET 0x01e
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D16_OFFSET 0x020
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D17_OFFSET 0x022
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D18_OFFSET 0x024
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D19_OFFSET 0x026
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D20_OFFSET 0x028
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D21_OFFSET 0x02a
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D22_OFFSET 0x02c
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D23_OFFSET 0x02e
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D24_OFFSET 0x030
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D25_OFFSET 0x032
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D26_OFFSET 0x034
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D27_OFFSET 0x036
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D28_OFFSET 0x038
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D29_OFFSET 0x03a
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D30_OFFSET 0x03c
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_D31_OFFSET 0x03e
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_CLK_OFFSET 0x040
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DQS0_OFFSET 0x042
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DQS1_OFFSET 0x044
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DQS2_OFFSET 0x046
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DQS3_OFFSET 0x048
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A1_OFFSET 0x04a
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A2_OFFSET 0x04c
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A3_OFFSET 0x04e
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A4_OFFSET 0x050
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A5_OFFSET 0x052
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A6_OFFSET 0x054
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A7_OFFSET 0x056
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A8_OFFSET 0x058
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A9_OFFSET 0x05a
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A10_OFFSET 0x05c
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D0_OFFSET 0x05e
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D1_OFFSET 0x060
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D2_OFFSET 0x062
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D3_OFFSET 0x064
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D4_OFFSET 0x066
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D5_OFFSET 0x068
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D6_OFFSET 0x06a
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D7_OFFSET 0x06c
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D8_OFFSET 0x06e
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D9_OFFSET 0x070
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D10_OFFSET 0x072
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D11_OFFSET 0x074
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D12_OFFSET 0x076
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D13_OFFSET 0x078
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D14_OFFSET 0x07a
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_D15_OFFSET 0x07c
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS0_OFFSET 0x07e
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS1_OFFSET 0x080
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS2_OFFSET 0x082
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS3_OFFSET 0x084
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS4_OFFSET 0x086
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS5_OFFSET 0x088
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS6_OFFSET 0x08a
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NCS7_OFFSET 0x08c
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_CLK_OFFSET 0x08e
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NADV_ALE_OFFSET 0x090
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NOE_OFFSET 0x092
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NWE_OFFSET 0x094
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NBE0_CLE_OFFSET 0x096
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NBE1_OFFSET 0x098
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_NWP_OFFSET 0x09a
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_WAIT0_OFFSET 0x09c
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_WAIT1_OFFSET 0x09e
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_WAIT2_OFFSET 0x0a0
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_WAIT3_OFFSET 0x0a2
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_PCLK_OFFSET 0x0a4
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_HSYNC_OFFSET 0x0a6
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_VSYNC_OFFSET 0x0a8
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_ACBIAS_OFFSET 0x0aa
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA0_OFFSET 0x0ac
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA1_OFFSET 0x0ae
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA2_OFFSET 0x0b0
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA3_OFFSET 0x0b2
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA4_OFFSET 0x0b4
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA5_OFFSET 0x0b6
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA6_OFFSET 0x0b8
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA7_OFFSET 0x0ba
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA8_OFFSET 0x0bc
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA9_OFFSET 0x0be
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA10_OFFSET 0x0c0
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA11_OFFSET 0x0c2
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA12_OFFSET 0x0c4
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA13_OFFSET 0x0c6
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA14_OFFSET 0x0c8
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA15_OFFSET 0x0ca
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA16_OFFSET 0x0cc
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA17_OFFSET 0x0ce
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA18_OFFSET 0x0d0
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA19_OFFSET 0x0d2
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA20_OFFSET 0x0d4
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA21_OFFSET 0x0d6
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA22_OFFSET 0x0d8
|
||||
#define OMAP3_CONTROL_PADCONF_DSS_DATA23_OFFSET 0x0da
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_HS_OFFSET 0x0dc
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_VS_OFFSET 0x0de
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_XCLKA_OFFSET 0x0e0
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_PCLK_OFFSET 0x0e2
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_FLD_OFFSET 0x0e4
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D0_OFFSET 0x0e6
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D1_OFFSET 0x0e8
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D2_OFFSET 0x0ea
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D3_OFFSET 0x0ec
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D4_OFFSET 0x0ee
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D5_OFFSET 0x0f0
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D6_OFFSET 0x0f2
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D7_OFFSET 0x0f4
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D8_OFFSET 0x0f6
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D9_OFFSET 0x0f8
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D10_OFFSET 0x0fa
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_D11_OFFSET 0x0fc
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_XCLKB_OFFSET 0x0fe
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_WEN_OFFSET 0x100
|
||||
#define OMAP3_CONTROL_PADCONF_CAM_STROBE_OFFSET 0x102
|
||||
#define OMAP3_CONTROL_PADCONF_CSI2_DX0_OFFSET 0x104
|
||||
#define OMAP3_CONTROL_PADCONF_CSI2_DY0_OFFSET 0x106
|
||||
#define OMAP3_CONTROL_PADCONF_CSI2_DX1_OFFSET 0x108
|
||||
#define OMAP3_CONTROL_PADCONF_CSI2_DY1_OFFSET 0x10a
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP2_FSX_OFFSET 0x10c
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP2_CLKX_OFFSET 0x10e
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP2_DR_OFFSET 0x110
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP2_DX_OFFSET 0x112
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_CLK_OFFSET 0x114
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_CMD_OFFSET 0x116
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT0_OFFSET 0x118
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT1_OFFSET 0x11a
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT2_OFFSET 0x11c
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT3_OFFSET 0x11e
|
||||
|
||||
/* SDMMC1_DAT4 - DAT7 are SIM_IO SIM_CLK SIM_PWRCTRL and SIM_RST on 36xx */
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT4_OFFSET 0x120
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT5_OFFSET 0x122
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT6_OFFSET 0x124
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC1_DAT7_OFFSET 0x126
|
||||
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_CLK_OFFSET 0x128
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_CMD_OFFSET 0x12a
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT0_OFFSET 0x12c
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT1_OFFSET 0x12e
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT2_OFFSET 0x130
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT3_OFFSET 0x132
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT4_OFFSET 0x134
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT5_OFFSET 0x136
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT6_OFFSET 0x138
|
||||
#define OMAP3_CONTROL_PADCONF_SDMMC2_DAT7_OFFSET 0x13a
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP3_DX_OFFSET 0x13c
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP3_DR_OFFSET 0x13e
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP3_CLKX_OFFSET 0x140
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP3_FSX_OFFSET 0x142
|
||||
#define OMAP3_CONTROL_PADCONF_UART2_CTS_OFFSET 0x144
|
||||
#define OMAP3_CONTROL_PADCONF_UART2_RTS_OFFSET 0x146
|
||||
#define OMAP3_CONTROL_PADCONF_UART2_TX_OFFSET 0x148
|
||||
#define OMAP3_CONTROL_PADCONF_UART2_RX_OFFSET 0x14a
|
||||
#define OMAP3_CONTROL_PADCONF_UART1_TX_OFFSET 0x14c
|
||||
#define OMAP3_CONTROL_PADCONF_UART1_RTS_OFFSET 0x14e
|
||||
#define OMAP3_CONTROL_PADCONF_UART1_CTS_OFFSET 0x150
|
||||
#define OMAP3_CONTROL_PADCONF_UART1_RX_OFFSET 0x152
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP4_CLKX_OFFSET 0x154
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP4_DR_OFFSET 0x156
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP4_DX_OFFSET 0x158
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP4_FSX_OFFSET 0x15a
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP1_CLKR_OFFSET 0x15c
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP1_FSR_OFFSET 0x15e
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP1_DX_OFFSET 0x160
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP1_DR_OFFSET 0x162
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP_CLKS_OFFSET 0x164
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP1_FSX_OFFSET 0x166
|
||||
#define OMAP3_CONTROL_PADCONF_MCBSP1_CLKX_OFFSET 0x168
|
||||
#define OMAP3_CONTROL_PADCONF_UART3_CTS_RCTX_OFFSET 0x16a
|
||||
#define OMAP3_CONTROL_PADCONF_UART3_RTS_SD_OFFSET 0x16c
|
||||
#define OMAP3_CONTROL_PADCONF_UART3_RX_IRRX_OFFSET 0x16e
|
||||
#define OMAP3_CONTROL_PADCONF_UART3_TX_IRTX_OFFSET 0x170
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_CLK_OFFSET 0x172
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_STP_OFFSET 0x174
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DIR_OFFSET 0x176
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_NXT_OFFSET 0x178
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA0_OFFSET 0x17a
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA1_OFFSET 0x17c
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA2_OFFSET 0x17e
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA3_OFFSET 0x180
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA4_OFFSET 0x182
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA5_OFFSET 0x184
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA6_OFFSET 0x186
|
||||
#define OMAP3_CONTROL_PADCONF_HSUSB0_DATA7_OFFSET 0x188
|
||||
#define OMAP3_CONTROL_PADCONF_I2C1_SCL_OFFSET 0x18a
|
||||
#define OMAP3_CONTROL_PADCONF_I2C1_SDA_OFFSET 0x18c
|
||||
#define OMAP3_CONTROL_PADCONF_I2C2_SCL_OFFSET 0x18e
|
||||
#define OMAP3_CONTROL_PADCONF_I2C2_SDA_OFFSET 0x190
|
||||
#define OMAP3_CONTROL_PADCONF_I2C3_SCL_OFFSET 0x192
|
||||
#define OMAP3_CONTROL_PADCONF_I2C3_SDA_OFFSET 0x194
|
||||
#define OMAP3_CONTROL_PADCONF_HDQ_SIO_OFFSET 0x196
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI1_CLK_OFFSET 0x198
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI1_SIMO_OFFSET 0x19a
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI1_SOMI_OFFSET 0x19c
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI1_CS0_OFFSET 0x19e
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI1_CS1_OFFSET 0x1a0
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI1_CS2_OFFSET 0x1a2
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI1_CS3_OFFSET 0x1a4
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI2_CLK_OFFSET 0x1a6
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI2_SIMO_OFFSET 0x1a8
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI2_SOMI_OFFSET 0x1aa
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI2_CS0_OFFSET 0x1ac
|
||||
#define OMAP3_CONTROL_PADCONF_MCSPI2_CS1_OFFSET 0x1ae
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_NIRQ_OFFSET 0x1b0
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_CLKOUT2_OFFSET 0x1b2
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD0_OFFSET 0x1b4
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD1_OFFSET 0x1b6
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD2_OFFSET 0x1b8
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD3_OFFSET 0x1ba
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD4_OFFSET 0x1bc
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD5_OFFSET 0x1be
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD6_OFFSET 0x1c0
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD7_OFFSET 0x1c2
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD8_OFFSET 0x1c4
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD9_OFFSET 0x1c6
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD10_OFFSET 0x1c8
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD11_OFFSET 0x1ca
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD12_OFFSET 0x1cc
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD13_OFFSET 0x1ce
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD14_OFFSET 0x1d0
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD15_OFFSET 0x1d2
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD16_OFFSET 0x1d4
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD17_OFFSET 0x1d6
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD18_OFFSET 0x1d8
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD19_OFFSET 0x1da
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD20_OFFSET 0x1dc
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD21_OFFSET 0x1de
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD22_OFFSET 0x1e0
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD23_OFFSET 0x1e2
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD24_OFFSET 0x1e4
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD25_OFFSET 0x1e6
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD26_OFFSET 0x1e8
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD27_OFFSET 0x1ea
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD28_OFFSET 0x1ec
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD29_OFFSET 0x1ee
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD30_OFFSET 0x1f0
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD31_OFFSET 0x1f2
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD32_OFFSET 0x1f4
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD33_OFFSET 0x1f6
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD34_OFFSET 0x1f8
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD35_OFFSET 0x1fa
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MCAD36_OFFSET 0x1fc
|
||||
|
||||
/* Note that 34xx TRM has SAD2D instead of CHASSIS for these */
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_CLK26MI_OFFSET 0x1fe
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_NRESPWRON_OFFSET 0x200
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_NRESWARW_OFFSET 0x202
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_NIRQ_OFFSET 0x204
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_FIQ_OFFSET 0x206
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_ARMIRQ_OFFSET 0x208
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_IVAIRQ_OFFSET 0x20a
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_DMAREQ0_OFFSET 0x20c
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_DMAREQ1_OFFSET 0x20e
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_DMAREQ2_OFFSET 0x210
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_DMAREQ3_OFFSET 0x212
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_NTRST_OFFSET 0x214
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_TDI_OFFSET 0x216
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_TDO_OFFSET 0x218
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_TMS_OFFSET 0x21a
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_TCK_OFFSET 0x21c
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_RTCK_OFFSET 0x21e
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_MSTDBY_OFFSET 0x220
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_IDLEREQ_OFFSET 0x222
|
||||
#define OMAP3_CONTROL_PADCONF_CHASSIS_IDLEACK_OFFSET 0x224
|
||||
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MWRITE_OFFSET 0x226
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_SWRITE_OFFSET 0x228
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MREAD_OFFSET 0x22a
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_SREAD_OFFSET 0x22c
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_MBUSFLAG_OFFSET 0x22e
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_SBUSFLAG_OFFSET 0x230
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_CKE0_OFFSET 0x232
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_CKE1_OFFSET 0x234
|
||||
|
||||
/* 36xx only */
|
||||
#define OMAP3_CONTROL_PADCONF_GPMC_A11_OFFSET 0x236
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_BA0_OFFSET 0x570
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_BA1_OFFSET 0x572
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A0_OFFSET 0x574
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A1_OFFSET 0x576
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A2_OFFSET 0x578
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A3_OFFSET 0x57a
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A4_OFFSET 0x57c
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A5_OFFSET 0x57e
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A6_OFFSET 0x580
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A7_OFFSET 0x582
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A8_OFFSET 0x584
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A9_OFFSET 0x586
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A10_OFFSET 0x588
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A11_OFFSET 0x58a
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A12_OFFSET 0x58c
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A13_OFFSET 0x58e
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_A14_OFFSET 0x590
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_NCS0_OFFSET 0x592
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_NCS1_OFFSET 0x594
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_NCLK_OFFSET 0x596
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_NRAS_OFFSET 0x598
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_NCAS_OFFSET 0x59a
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_NWE_OFFSET 0x59c
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DM0_OFFSET 0x59e
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DM1_OFFSET 0x5a0
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DM2_OFFSET 0x5a2
|
||||
#define OMAP3_CONTROL_PADCONF_SDRC_DM3_OFFSET 0x5a4
|
||||
|
||||
/* 36xx only, these are SDMMC1_DAT4 - DAT7 on 34xx */
|
||||
#define OMAP3_CONTROL_PADCONF_SIM_IO_OFFSET 0x120
|
||||
#define OMAP3_CONTROL_PADCONF_SIM_CLK_OFFSET 0x122
|
||||
#define OMAP3_CONTROL_PADCONF_SIM_PWRCTRL_OFFSET 0x124
|
||||
#define OMAP3_CONTROL_PADCONF_SIM_RST_OFFSET 0x126
|
||||
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_CLK_OFFSET 0x5a8
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_CTL_OFFSET 0x5aa
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D0_OFFSET 0x5ac
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D1_OFFSET 0x5ae
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D2_OFFSET 0x5b0
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D3_OFFSET 0x5b2
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D4_OFFSET 0x5b4
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D5_OFFSET 0x5b6
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D6_OFFSET 0x5b8
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D7_OFFSET 0x5ba
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D8_OFFSET 0x5bc
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D9_OFFSET 0x5be
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D10_OFFSET 0x5c0
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D11_OFFSET 0x5c2
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D12_OFFSET 0x5c4
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D13_OFFSET 0x5c6
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D14_OFFSET 0x5c8
|
||||
#define OMAP3_CONTROL_PADCONF_ETK_D15_OFFSET 0x5ca
|
||||
#define OMAP3_CONTROL_PADCONF_I2C4_SCL_OFFSET 0x9d0
|
||||
#define OMAP3_CONTROL_PADCONF_I2C4_SDA_OFFSET 0x9d2
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_32K_OFFSET 0x9d4
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_CLKREQ_OFFSET 0x9d6
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_NRESWARM_OFFSET 0x9d8
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_BOOT0_OFFSET 0x9da
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_BOOT1_OFFSET 0x9dc
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_BOOT2_OFFSET 0x9de
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_BOOT3_OFFSET 0x9e0
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_BOOT4_OFFSET 0x9e2
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_BOOT5_OFFSET 0x9e4
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_BOOT6_OFFSET 0x9e6
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_OFF_MODE_OFFSET 0x9e8
|
||||
#define OMAP3_CONTROL_PADCONF_SYS_CLKOUT1_OFFSET 0x9ea
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_NTRST_OFFSET 0x9ec
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_TCK_OFFSET 0x9ee
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_TMS_TMSC_OFFSET 0x9f0
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_TDI_OFFSET 0x9f2
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_EMU0_OFFSET 0x9f4
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_EMU1_OFFSET 0x9f6
|
||||
#define OMAP3_CONTROL_PADCONF_SAD2D_SWAKEUP_OFFSET 0xa1c
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_RTCK_OFFSET 0xa1e
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_TDO_OFFSET 0xa20
|
||||
#define OMAP3_CONTROL_PADCONF_GPIO_127 0xa24
|
||||
#define OMAP3_CONTROL_PADCONF_GPIO_126 0xa26
|
||||
#define OMAP3_CONTROL_PADCONF_GPIO_128 0xa28
|
||||
#define OMAP3_CONTROL_PADCONF_GPIO_129 0xa2a
|
||||
|
||||
#define OMAP3_CONTROL_PADCONF_MUX_SIZE \
|
||||
(OMAP3_CONTROL_PADCONF_GPIO_129 + 0x2)
|
@ -160,7 +160,6 @@
|
||||
#include "prm44xx.h"
|
||||
#include "prm33xx.h"
|
||||
#include "prminst44xx.h"
|
||||
#include "mux.h"
|
||||
#include "pm.h"
|
||||
|
||||
/* Name of the OMAP hwmod for the MPU */
|
||||
@ -217,9 +216,6 @@ static LIST_HEAD(omap_hwmod_list);
|
||||
/* mpu_oh: used to add/remove MPU initiator from sleepdep list */
|
||||
static struct omap_hwmod *mpu_oh;
|
||||
|
||||
/* io_chain_lock: used to serialize reconfigurations of the I/O chain */
|
||||
static DEFINE_SPINLOCK(io_chain_lock);
|
||||
|
||||
/*
|
||||
* linkspace: ptr to a buffer that struct omap_hwmod_link records are
|
||||
* allocated from - used to reduce the number of small memory
|
||||
@ -593,51 +589,6 @@ static int _set_module_autoidle(struct omap_hwmod *oh, u8 autoidle,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* _set_idle_ioring_wakeup - enable/disable IO pad wakeup on hwmod idle for mux
|
||||
* @oh: struct omap_hwmod *
|
||||
* @set_wake: bool value indicating to set (true) or clear (false) wakeup enable
|
||||
*
|
||||
* Set or clear the I/O pad wakeup flag in the mux entries for the
|
||||
* hwmod @oh. This function changes the @oh->mux->pads_dynamic array
|
||||
* in memory. If the hwmod is currently idled, and the new idle
|
||||
* values don't match the previous ones, this function will also
|
||||
* update the SCM PADCTRL registers. Otherwise, if the hwmod is not
|
||||
* currently idled, this function won't touch the hardware: the new
|
||||
* mux settings are written to the SCM PADCTRL registers when the
|
||||
* hwmod is idled. No return value.
|
||||
*/
|
||||
static void _set_idle_ioring_wakeup(struct omap_hwmod *oh, bool set_wake)
|
||||
{
|
||||
struct omap_device_pad *pad;
|
||||
bool change = false;
|
||||
u16 prev_idle;
|
||||
int j;
|
||||
|
||||
if (!oh->mux || !oh->mux->enabled)
|
||||
return;
|
||||
|
||||
for (j = 0; j < oh->mux->nr_pads_dynamic; j++) {
|
||||
pad = oh->mux->pads_dynamic[j];
|
||||
|
||||
if (!(pad->flags & OMAP_DEVICE_PAD_WAKEUP))
|
||||
continue;
|
||||
|
||||
prev_idle = pad->idle;
|
||||
|
||||
if (set_wake)
|
||||
pad->idle |= OMAP_WAKEUP_EN;
|
||||
else
|
||||
pad->idle &= ~OMAP_WAKEUP_EN;
|
||||
|
||||
if (prev_idle != pad->idle)
|
||||
change = true;
|
||||
}
|
||||
|
||||
if (change && oh->_state == _HWMOD_STATE_IDLE)
|
||||
omap_hwmod_mux(oh->mux, _HWMOD_STATE_IDLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* _enable_wakeup: set OCP_SYSCONFIG.ENAWAKEUP bit in the hardware
|
||||
* @oh: struct omap_hwmod *
|
||||
@ -2017,29 +1968,6 @@ static int _reset(struct omap_hwmod *oh)
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* _reconfigure_io_chain - clear any I/O chain wakeups and reconfigure chain
|
||||
*
|
||||
* Call the appropriate PRM function to clear any logged I/O chain
|
||||
* wakeups and to reconfigure the chain. This apparently needs to be
|
||||
* done upon every mux change. Since hwmods can be concurrently
|
||||
* enabled and idled, hold a spinlock around the I/O chain
|
||||
* reconfiguration sequence. No return value.
|
||||
*
|
||||
* XXX When the PRM code is moved to drivers, this function can be removed,
|
||||
* as the PRM infrastructure should abstract this.
|
||||
*/
|
||||
static void _reconfigure_io_chain(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&io_chain_lock, flags);
|
||||
|
||||
omap_prm_reconfigure_io_chain();
|
||||
|
||||
spin_unlock_irqrestore(&io_chain_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* _omap4_update_context_lost - increment hwmod context loss counter if
|
||||
* hwmod context was lost, and clear hardware context loss reg
|
||||
@ -2109,18 +2037,9 @@ static int _enable(struct omap_hwmod *oh)
|
||||
|
||||
/*
|
||||
* hwmods with HWMOD_INIT_NO_IDLE flag set are left in enabled
|
||||
* state at init. Now that someone is really trying to enable
|
||||
* them, just ensure that the hwmod mux is set.
|
||||
* state at init.
|
||||
*/
|
||||
if (oh->_int_flags & _HWMOD_SKIP_ENABLE) {
|
||||
/*
|
||||
* If the caller has mux data populated, do the mux'ing
|
||||
* which wouldn't have been done as part of the _enable()
|
||||
* done during setup.
|
||||
*/
|
||||
if (oh->mux)
|
||||
omap_hwmod_mux(oh->mux, _HWMOD_STATE_ENABLED);
|
||||
|
||||
oh->_int_flags &= ~_HWMOD_SKIP_ENABLE;
|
||||
return 0;
|
||||
}
|
||||
@ -2145,16 +2064,6 @@ static int _enable(struct omap_hwmod *oh)
|
||||
if (_are_all_hardreset_lines_asserted(oh))
|
||||
return 0;
|
||||
|
||||
/* Mux pins for device runtime if populated */
|
||||
if (oh->mux && (!oh->mux->enabled ||
|
||||
((oh->_state == _HWMOD_STATE_IDLE) &&
|
||||
oh->mux->pads_dynamic))) {
|
||||
omap_hwmod_mux(oh->mux, _HWMOD_STATE_ENABLED);
|
||||
_reconfigure_io_chain();
|
||||
} else if (oh->flags & HWMOD_RECONFIG_IO_CHAIN) {
|
||||
_reconfigure_io_chain();
|
||||
}
|
||||
|
||||
_add_initiator_dep(oh, mpu_oh);
|
||||
|
||||
if (oh->clkdm) {
|
||||
@ -2260,14 +2169,6 @@ static int _idle(struct omap_hwmod *oh)
|
||||
clkdm_hwmod_disable(oh->clkdm, oh);
|
||||
}
|
||||
|
||||
/* Mux pins for device idle if populated */
|
||||
if (oh->mux && oh->mux->pads_dynamic) {
|
||||
omap_hwmod_mux(oh->mux, _HWMOD_STATE_IDLE);
|
||||
_reconfigure_io_chain();
|
||||
} else if (oh->flags & HWMOD_RECONFIG_IO_CHAIN) {
|
||||
_reconfigure_io_chain();
|
||||
}
|
||||
|
||||
oh->_state = _HWMOD_STATE_IDLE;
|
||||
|
||||
return 0;
|
||||
@ -2334,10 +2235,6 @@ static int _shutdown(struct omap_hwmod *oh)
|
||||
for (i = 0; i < oh->rst_lines_cnt; i++)
|
||||
_assert_hardreset(oh, oh->rst_lines[i].name);
|
||||
|
||||
/* Mux pins to safe mode or use populated off mode values */
|
||||
if (oh->mux)
|
||||
omap_hwmod_mux(oh->mux, _HWMOD_STATE_DISABLED);
|
||||
|
||||
oh->_state = _HWMOD_STATE_DISABLED;
|
||||
|
||||
return 0;
|
||||
@ -3729,7 +3626,6 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
|
||||
_write_sysconfig(v, oh);
|
||||
}
|
||||
|
||||
_set_idle_ioring_wakeup(oh, true);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
@ -3762,7 +3658,6 @@ int omap_hwmod_disable_wakeup(struct omap_hwmod *oh)
|
||||
_write_sysconfig(v, oh);
|
||||
}
|
||||
|
||||
_set_idle_ioring_wakeup(oh, false);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
|
@ -17,156 +17,11 @@
|
||||
|
||||
#include "omap_hwmod_common_data.h"
|
||||
|
||||
struct omap_hwmod_addr_space omap2430_mmc1_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x4809c000,
|
||||
.pa_end = 0x4809c1ff,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2430_mmc2_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x480b4000,
|
||||
.pa_end = 0x480b41ff,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_i2c1_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x48070000,
|
||||
.pa_end = 0x48070000 + SZ_128 - 1,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_i2c2_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x48072000,
|
||||
.pa_end = 0x48072000 + SZ_128 - 1,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_dss_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48050000,
|
||||
.pa_end = 0x48050000 + SZ_1K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_dss_dispc_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48050400,
|
||||
.pa_end = 0x48050400 + SZ_1K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_dss_rfbi_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48050800,
|
||||
.pa_end = 0x48050800 + SZ_1K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_dss_venc_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48050C00,
|
||||
.pa_end = 0x48050C00 + SZ_1K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_timer10_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48086000,
|
||||
.pa_end = 0x48086000 + SZ_1K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_timer11_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48088000,
|
||||
.pa_end = 0x48088000 + SZ_1K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2xxx_timer12_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x4808a000,
|
||||
.pa_end = 0x4808a000 + SZ_1K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_mcspi1_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x48098000,
|
||||
.pa_end = 0x48098000 + SZ_256 - 1,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_mcspi2_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x4809a000,
|
||||
.pa_end = 0x4809a000 + SZ_256 - 1,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2430_mcspi3_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x480b8000,
|
||||
.pa_end = 0x480b8000 + SZ_256 - 1,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_dma_system_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48056000,
|
||||
.pa_end = 0x48056000 + SZ_4K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_mcbsp1_addrs[] = {
|
||||
{
|
||||
.name = "mpu",
|
||||
.pa_start = 0x48074000,
|
||||
.pa_end = 0x480740ff,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_addr_space omap2_hdq1w_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x480b2000,
|
||||
.pa_end = 0x480b2fff,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
{ },
|
||||
};
|
||||
|
@ -45,204 +45,31 @@ struct omap_hwmod_class omap2_venc_hwmod_class = {
|
||||
.name = "venc",
|
||||
};
|
||||
|
||||
|
||||
/* Common DMA request line data */
|
||||
struct omap_hwmod_dma_info omap2_uart1_sdma_reqs[] = {
|
||||
{ .name = "rx", .dma_req = 50, },
|
||||
{ .name = "tx", .dma_req = 49, },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_uart2_sdma_reqs[] = {
|
||||
{ .name = "rx", .dma_req = 52, },
|
||||
{ .name = "tx", .dma_req = 51, },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_uart3_sdma_reqs[] = {
|
||||
{ .name = "rx", .dma_req = 54, },
|
||||
{ .name = "tx", .dma_req = 53, },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_i2c1_sdma_reqs[] = {
|
||||
{ .name = "tx", .dma_req = 27 },
|
||||
{ .name = "rx", .dma_req = 28 },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_i2c2_sdma_reqs[] = {
|
||||
{ .name = "tx", .dma_req = 29 },
|
||||
{ .name = "rx", .dma_req = 30 },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_mcspi1_sdma_reqs[] = {
|
||||
{ .name = "tx0", .dma_req = 35 }, /* DMA_SPI1_TX0 */
|
||||
{ .name = "rx0", .dma_req = 36 }, /* DMA_SPI1_RX0 */
|
||||
{ .name = "tx1", .dma_req = 37 }, /* DMA_SPI1_TX1 */
|
||||
{ .name = "rx1", .dma_req = 38 }, /* DMA_SPI1_RX1 */
|
||||
{ .name = "tx2", .dma_req = 39 }, /* DMA_SPI1_TX2 */
|
||||
{ .name = "rx2", .dma_req = 40 }, /* DMA_SPI1_RX2 */
|
||||
{ .name = "tx3", .dma_req = 41 }, /* DMA_SPI1_TX3 */
|
||||
{ .name = "rx3", .dma_req = 42 }, /* DMA_SPI1_RX3 */
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_mcspi2_sdma_reqs[] = {
|
||||
{ .name = "tx0", .dma_req = 43 }, /* DMA_SPI2_TX0 */
|
||||
{ .name = "rx0", .dma_req = 44 }, /* DMA_SPI2_RX0 */
|
||||
{ .name = "tx1", .dma_req = 45 }, /* DMA_SPI2_TX1 */
|
||||
{ .name = "rx1", .dma_req = 46 }, /* DMA_SPI2_RX1 */
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_mcbsp1_sdma_reqs[] = {
|
||||
{ .name = "rx", .dma_req = 32 },
|
||||
{ .name = "tx", .dma_req = 31 },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_mcbsp2_sdma_reqs[] = {
|
||||
{ .name = "rx", .dma_req = 34 },
|
||||
{ .name = "tx", .dma_req = 33 },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
struct omap_hwmod_dma_info omap2_mcbsp3_sdma_reqs[] = {
|
||||
{ .name = "rx", .dma_req = 18 },
|
||||
{ .name = "tx", .dma_req = 17 },
|
||||
{ .dma_req = -1 }
|
||||
};
|
||||
|
||||
/* Other IP block data */
|
||||
|
||||
|
||||
/*
|
||||
* omap_hwmod class data
|
||||
*/
|
||||
|
||||
struct omap_hwmod_class l3_hwmod_class = {
|
||||
.name = "l3"
|
||||
.name = "l3",
|
||||
};
|
||||
|
||||
struct omap_hwmod_class l4_hwmod_class = {
|
||||
.name = "l4"
|
||||
.name = "l4",
|
||||
};
|
||||
|
||||
struct omap_hwmod_class mpu_hwmod_class = {
|
||||
.name = "mpu"
|
||||
.name = "mpu",
|
||||
};
|
||||
|
||||
struct omap_hwmod_class iva_hwmod_class = {
|
||||
.name = "iva"
|
||||
.name = "iva",
|
||||
};
|
||||
|
||||
/* Common MPU IRQ line data */
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer1_mpu_irqs[] = {
|
||||
{ .irq = 37 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer2_mpu_irqs[] = {
|
||||
{ .irq = 38 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer3_mpu_irqs[] = {
|
||||
{ .irq = 39 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer4_mpu_irqs[] = {
|
||||
{ .irq = 40 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer5_mpu_irqs[] = {
|
||||
{ .irq = 41 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer6_mpu_irqs[] = {
|
||||
{ .irq = 42 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer7_mpu_irqs[] = {
|
||||
{ .irq = 43 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer8_mpu_irqs[] = {
|
||||
{ .irq = 44 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer9_mpu_irqs[] = {
|
||||
{ .irq = 45 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer10_mpu_irqs[] = {
|
||||
{ .irq = 46 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_timer11_mpu_irqs[] = {
|
||||
{ .irq = 47 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_uart1_mpu_irqs[] = {
|
||||
{ .irq = 72 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_uart2_mpu_irqs[] = {
|
||||
{ .irq = 73 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_uart3_mpu_irqs[] = {
|
||||
{ .irq = 74 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_dispc_irqs[] = {
|
||||
{ .irq = 25 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_i2c1_mpu_irqs[] = {
|
||||
{ .irq = 56 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_i2c2_mpu_irqs[] = {
|
||||
{ .irq = 57 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_gpio1_irqs[] = {
|
||||
{ .irq = 29 + OMAP_INTC_START, }, /* INT_24XX_GPIO_BANK1 */
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_gpio2_irqs[] = {
|
||||
{ .irq = 30 + OMAP_INTC_START, }, /* INT_24XX_GPIO_BANK2 */
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_gpio3_irqs[] = {
|
||||
{ .irq = 31 + OMAP_INTC_START, }, /* INT_24XX_GPIO_BANK3 */
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_gpio4_irqs[] = {
|
||||
{ .irq = 32 + OMAP_INTC_START, }, /* INT_24XX_GPIO_BANK4 */
|
||||
{ .irq = -1 },
|
||||
{ .irq = -1, },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_dma_system_irqs[] = {
|
||||
@ -250,17 +77,7 @@ struct omap_hwmod_irq_info omap2_dma_system_irqs[] = {
|
||||
{ .name = "1", .irq = 13 + OMAP_INTC_START, }, /* INT_24XX_SDMA_IRQ1 */
|
||||
{ .name = "2", .irq = 14 + OMAP_INTC_START, }, /* INT_24XX_SDMA_IRQ2 */
|
||||
{ .name = "3", .irq = 15 + OMAP_INTC_START, }, /* INT_24XX_SDMA_IRQ3 */
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_mcspi1_mpu_irqs[] = {
|
||||
{ .irq = 65 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_mcspi2_mpu_irqs[] = {
|
||||
{ .irq = 66 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
{ .irq = -1, },
|
||||
};
|
||||
|
||||
struct omap_hwmod_class_sysconfig omap2_hdq1w_sysc = {
|
||||
@ -277,9 +94,3 @@ struct omap_hwmod_class omap2_hdq1w_class = {
|
||||
.sysc = &omap2_hdq1w_sysc,
|
||||
.reset = &omap_hdq1w_reset,
|
||||
};
|
||||
|
||||
struct omap_hwmod_irq_info omap2_hdq1w_mpu_irqs[] = {
|
||||
{ .irq = 58 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
|
@ -191,7 +191,6 @@ struct omap_hwmod_ocp_if omap2xxx_l4_core__dss = {
|
||||
.master = &omap2xxx_l4_core_hwmod,
|
||||
.slave = &omap2xxx_dss_core_hwmod,
|
||||
.clk = "dss_ick",
|
||||
.addr = omap2_dss_addrs,
|
||||
.fw = {
|
||||
.omap2 = {
|
||||
.l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
|
||||
@ -206,7 +205,6 @@ struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_dispc = {
|
||||
.master = &omap2xxx_l4_core_hwmod,
|
||||
.slave = &omap2xxx_dss_dispc_hwmod,
|
||||
.clk = "dss_ick",
|
||||
.addr = omap2_dss_dispc_addrs,
|
||||
.fw = {
|
||||
.omap2 = {
|
||||
.l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION,
|
||||
@ -221,7 +219,6 @@ struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_rfbi = {
|
||||
.master = &omap2xxx_l4_core_hwmod,
|
||||
.slave = &omap2xxx_dss_rfbi_hwmod,
|
||||
.clk = "dss_ick",
|
||||
.addr = omap2_dss_rfbi_addrs,
|
||||
.fw = {
|
||||
.omap2 = {
|
||||
.l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
|
||||
@ -236,7 +233,6 @@ struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_venc = {
|
||||
.master = &omap2xxx_l4_core_hwmod,
|
||||
.slave = &omap2xxx_dss_venc_hwmod,
|
||||
.clk = "dss_ick",
|
||||
.addr = omap2_dss_venc_addrs,
|
||||
.fw = {
|
||||
.omap2 = {
|
||||
.l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION,
|
||||
|
@ -569,7 +569,6 @@ struct omap_hwmod omap2xxx_dss_core_hwmod = {
|
||||
struct omap_hwmod omap2xxx_dss_dispc_hwmod = {
|
||||
.name = "dss_dispc",
|
||||
.class = &omap2_dispc_hwmod_class,
|
||||
.mpu_irqs = omap2_dispc_irqs,
|
||||
.main_clk = "dss1_fck",
|
||||
.prcm = {
|
||||
.omap2 = {
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -19,22 +19,7 @@
|
||||
#include "display.h"
|
||||
|
||||
/* Common address space across OMAP2xxx/3xxx */
|
||||
extern struct omap_hwmod_addr_space omap2_i2c1_addr_space[];
|
||||
extern struct omap_hwmod_addr_space omap2_i2c2_addr_space[];
|
||||
extern struct omap_hwmod_addr_space omap2_dss_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2_dss_dispc_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2_dss_rfbi_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2_dss_venc_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2_timer10_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2_timer11_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2430_mmc1_addr_space[];
|
||||
extern struct omap_hwmod_addr_space omap2430_mmc2_addr_space[];
|
||||
extern struct omap_hwmod_addr_space omap2_mcspi1_addr_space[];
|
||||
extern struct omap_hwmod_addr_space omap2_mcspi2_addr_space[];
|
||||
extern struct omap_hwmod_addr_space omap2430_mcspi3_addr_space[];
|
||||
extern struct omap_hwmod_addr_space omap2_dma_system_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2_mcbsp1_addrs[];
|
||||
extern struct omap_hwmod_addr_space omap2_hdq1w_addr_space[];
|
||||
|
||||
/* Common IP block data across OMAP2xxx */
|
||||
extern struct omap_gpio_dev_attr omap2xxx_gpio_dev_attr;
|
||||
|
@ -31,7 +31,6 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "common-board-devices.h"
|
||||
#include "dss-common.h"
|
||||
#include "control.h"
|
||||
#include "omap_device.h"
|
||||
#include "omap-pm.h"
|
||||
|
@ -30,7 +30,6 @@
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
#include "pm.h"
|
||||
#include "twl-common.h"
|
||||
|
||||
#ifdef CONFIG_SUSPEND
|
||||
/*
|
||||
@ -72,42 +71,6 @@ void omap_pm_get_oscillator(u32 *tstart, u32 *tshut)
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __init _init_omap_device(char *name)
|
||||
{
|
||||
struct omap_hwmod *oh;
|
||||
struct platform_device *pdev;
|
||||
|
||||
oh = omap_hwmod_lookup(name);
|
||||
if (WARN(!oh, "%s: could not find omap_hwmod for %s\n",
|
||||
__func__, name))
|
||||
return -ENODEV;
|
||||
|
||||
pdev = omap_device_build(oh->name, 0, oh, NULL, 0);
|
||||
if (WARN(IS_ERR(pdev), "%s: could not build omap_device for %s\n",
|
||||
__func__, name))
|
||||
return -ENODEV;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build omap_devices for processors and bus.
|
||||
*/
|
||||
static void __init omap2_init_processor_devices(void)
|
||||
{
|
||||
_init_omap_device("mpu");
|
||||
if (omap3_has_iva())
|
||||
_init_omap_device("iva");
|
||||
|
||||
if (cpu_is_omap44xx()) {
|
||||
_init_omap_device("l3_main_1");
|
||||
_init_omap_device("dsp");
|
||||
_init_omap_device("iva");
|
||||
} else {
|
||||
_init_omap_device("l3_main");
|
||||
}
|
||||
}
|
||||
|
||||
int __init omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused)
|
||||
{
|
||||
clkdm_allow_idle(clkdm);
|
||||
@ -215,7 +178,7 @@ static int omap_pm_enter(suspend_state_t suspend_state)
|
||||
static int omap_pm_begin(suspend_state_t state)
|
||||
{
|
||||
cpu_idle_poll_ctrl(true);
|
||||
if (cpu_is_omap34xx())
|
||||
if (soc_is_omap34xx())
|
||||
omap_prcm_irq_prepare();
|
||||
return 0;
|
||||
}
|
||||
@ -227,7 +190,7 @@ static void omap_pm_end(void)
|
||||
|
||||
static void omap_pm_finish(void)
|
||||
{
|
||||
if (cpu_is_omap34xx())
|
||||
if (soc_is_omap34xx())
|
||||
omap_prcm_irq_complete();
|
||||
}
|
||||
|
||||
@ -252,7 +215,7 @@ void omap_common_suspend_init(void *pm_suspend)
|
||||
|
||||
static void __init omap3_init_voltages(void)
|
||||
{
|
||||
if (!cpu_is_omap34xx())
|
||||
if (!soc_is_omap34xx())
|
||||
return;
|
||||
|
||||
omap2_set_init_voltage("mpu_iva", "dpll1_ck", "mpu");
|
||||
@ -261,7 +224,7 @@ static void __init omap3_init_voltages(void)
|
||||
|
||||
static void __init omap4_init_voltages(void)
|
||||
{
|
||||
if (!cpu_is_omap44xx())
|
||||
if (!soc_is_omap44xx())
|
||||
return;
|
||||
|
||||
omap2_set_init_voltage("mpu", "dpll_mpu_ck", "mpu");
|
||||
@ -269,18 +232,8 @@ static void __init omap4_init_voltages(void)
|
||||
omap2_set_init_voltage("iva", "dpll_iva_m5x2_ck", "iva");
|
||||
}
|
||||
|
||||
static inline void omap_init_cpufreq(void)
|
||||
{
|
||||
struct platform_device_info devinfo = { .name = "omap-cpufreq" };
|
||||
|
||||
if (!of_have_populated_dt())
|
||||
platform_device_register_full(&devinfo);
|
||||
}
|
||||
|
||||
static int __init omap2_common_pm_init(void)
|
||||
{
|
||||
if (!of_have_populated_dt())
|
||||
omap2_init_processor_devices();
|
||||
omap_pm_if_init();
|
||||
|
||||
return 0;
|
||||
@ -289,13 +242,9 @@ omap_postcore_initcall(omap2_common_pm_init);
|
||||
|
||||
int __init omap2_common_pm_late_init(void)
|
||||
{
|
||||
if (of_have_populated_dt()) {
|
||||
omap3_twl_init();
|
||||
omap4_twl_init();
|
||||
}
|
||||
|
||||
/* Init the voltage layer */
|
||||
omap_pmic_late_init();
|
||||
omap3_twl_init();
|
||||
omap4_twl_init();
|
||||
omap_voltage_late_init();
|
||||
|
||||
/* Initialize the voltages */
|
||||
@ -305,8 +254,5 @@ int __init omap2_common_pm_late_init(void)
|
||||
/* Smartreflex device init */
|
||||
omap_devinit_smartreflex();
|
||||
|
||||
/* cpufreq dummy device instantiation */
|
||||
omap_init_cpufreq();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* SDRC register values for the Hynix H8MBX00U0MER-0EM
|
||||
*
|
||||
* Copyright (C) 2009 Texas Instruments, Inc.
|
||||
*
|
||||
* 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 __ARCH_ARM_MACH_OMAP2_SDRAM_HYNIX_H8MBX00U0MER0EM
|
||||
#define __ARCH_ARM_MACH_OMAP2_SDRAM_HYNIX_H8MBX00U0MER0EM
|
||||
|
||||
#include "sdrc.h"
|
||||
|
||||
/* Hynix H8MBX00U0MER-0EM */
|
||||
static struct omap_sdrc_params h8mbx00u0mer0em_sdrc_params[] = {
|
||||
[0] = {
|
||||
.rate = 200000000,
|
||||
.actim_ctrla = 0xa2e1b4c6,
|
||||
.actim_ctrlb = 0x0002131c,
|
||||
.rfr_ctrl = 0x0005e601,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[1] = {
|
||||
.rate = 166000000,
|
||||
.actim_ctrla = 0x629db4c6,
|
||||
.actim_ctrlb = 0x00012214,
|
||||
.rfr_ctrl = 0x0004dc01,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[2] = {
|
||||
.rate = 100000000,
|
||||
.actim_ctrla = 0x51912284,
|
||||
.actim_ctrlb = 0x0002120e,
|
||||
.rfr_ctrl = 0x0002d101,
|
||||
.mr = 0x00000022,
|
||||
},
|
||||
[3] = {
|
||||
.rate = 83000000,
|
||||
.actim_ctrla = 0x31512283,
|
||||
.actim_ctrlb = 0x0001220a,
|
||||
.rfr_ctrl = 0x00025501,
|
||||
.mr = 0x00000022,
|
||||
},
|
||||
[4] = {
|
||||
.rate = 0
|
||||
},
|
||||
};
|
||||
|
||||
#endif
|
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* SDRC register values for the Micron MT46H32M32LF-6
|
||||
*
|
||||
* Copyright (C) 2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2008-2009 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley
|
||||
*
|
||||
* 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 ARCH_ARM_MACH_OMAP2_SDRAM_MICRON_MT46H32M32LF
|
||||
#define ARCH_ARM_MACH_OMAP2_SDRAM_MICRON_MT46H32M32LF
|
||||
|
||||
#include "sdrc.h"
|
||||
|
||||
/* Micron MT46H32M32LF-6 */
|
||||
/* XXX Using ARE = 0x1 (no autorefresh burst) -- can this be changed? */
|
||||
static struct omap_sdrc_params mt46h32m32lf6_sdrc_params[] = {
|
||||
[0] = {
|
||||
.rate = 166000000,
|
||||
.actim_ctrla = 0x9a9db4c6,
|
||||
.actim_ctrlb = 0x00011217,
|
||||
.rfr_ctrl = 0x0004dc01,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[1] = {
|
||||
.rate = 165941176,
|
||||
.actim_ctrla = 0x9a9db4c6,
|
||||
.actim_ctrlb = 0x00011217,
|
||||
.rfr_ctrl = 0x0004dc01,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[2] = {
|
||||
.rate = 83000000,
|
||||
.actim_ctrla = 0x51512283,
|
||||
.actim_ctrlb = 0x0001120c,
|
||||
.rfr_ctrl = 0x00025501,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[3] = {
|
||||
.rate = 82970588,
|
||||
.actim_ctrla = 0x51512283,
|
||||
.actim_ctrlb = 0x0001120c,
|
||||
.rfr_ctrl = 0x00025501,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[4] = {
|
||||
.rate = 0
|
||||
},
|
||||
};
|
||||
|
||||
#endif
|
@ -1,299 +0,0 @@
|
||||
/*
|
||||
* SDRC register values for Nokia boards
|
||||
*
|
||||
* Copyright (C) 2008, 2010-2011 Nokia Corporation
|
||||
*
|
||||
* Lauri Leukkunen <lauri.leukkunen@nokia.com>
|
||||
*
|
||||
* Original code by Juha Yrjola <juha.yrjola@solidboot.com>
|
||||
*
|
||||
* 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/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "sdram-nokia.h"
|
||||
#include "sdrc.h"
|
||||
|
||||
/* In picoseconds, except for tREF (ns), tXP, tCKE, tWTR (clks) */
|
||||
struct sdram_timings {
|
||||
u32 casl;
|
||||
u32 tDAL;
|
||||
u32 tDPL;
|
||||
u32 tRRD;
|
||||
u32 tRCD;
|
||||
u32 tRP;
|
||||
u32 tRAS;
|
||||
u32 tRC;
|
||||
u32 tRFC;
|
||||
u32 tXSR;
|
||||
|
||||
u32 tREF; /* in ns */
|
||||
|
||||
u32 tXP;
|
||||
u32 tCKE;
|
||||
u32 tWTR;
|
||||
};
|
||||
|
||||
static const struct sdram_timings nokia_97dot6mhz_timings[] = {
|
||||
{
|
||||
.casl = 3,
|
||||
.tDAL = 30725,
|
||||
.tDPL = 15362,
|
||||
.tRRD = 10241,
|
||||
.tRCD = 20483,
|
||||
.tRP = 15362,
|
||||
.tRAS = 40967,
|
||||
.tRC = 56330,
|
||||
.tRFC = 138266,
|
||||
.tXSR = 204839,
|
||||
|
||||
.tREF = 7798,
|
||||
|
||||
.tXP = 2,
|
||||
.tCKE = 4,
|
||||
.tWTR = 2,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct sdram_timings nokia_166mhz_timings[] = {
|
||||
{
|
||||
.casl = 3,
|
||||
.tDAL = 33000,
|
||||
.tDPL = 15000,
|
||||
.tRRD = 12000,
|
||||
.tRCD = 22500,
|
||||
.tRP = 18000,
|
||||
.tRAS = 42000,
|
||||
.tRC = 66000,
|
||||
.tRFC = 138000,
|
||||
.tXSR = 200000,
|
||||
|
||||
.tREF = 7800,
|
||||
|
||||
.tXP = 2,
|
||||
.tCKE = 2,
|
||||
.tWTR = 2
|
||||
},
|
||||
};
|
||||
|
||||
static const struct sdram_timings nokia_195dot2mhz_timings[] = {
|
||||
{
|
||||
.casl = 3,
|
||||
.tDAL = 30725,
|
||||
.tDPL = 15362,
|
||||
.tRRD = 10241,
|
||||
.tRCD = 20483,
|
||||
.tRP = 15362,
|
||||
.tRAS = 40967,
|
||||
.tRC = 56330,
|
||||
.tRFC = 138266,
|
||||
.tXSR = 204839,
|
||||
|
||||
.tREF = 7752,
|
||||
|
||||
.tXP = 2,
|
||||
.tCKE = 4,
|
||||
.tWTR = 2,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct sdram_timings nokia_200mhz_timings[] = {
|
||||
{
|
||||
.casl = 3,
|
||||
.tDAL = 30000,
|
||||
.tDPL = 15000,
|
||||
.tRRD = 10000,
|
||||
.tRCD = 20000,
|
||||
.tRP = 15000,
|
||||
.tRAS = 40000,
|
||||
.tRC = 55000,
|
||||
.tRFC = 140000,
|
||||
.tXSR = 200000,
|
||||
|
||||
.tREF = 7800,
|
||||
|
||||
.tXP = 2,
|
||||
.tCKE = 4,
|
||||
.tWTR = 2
|
||||
},
|
||||
};
|
||||
|
||||
static const struct {
|
||||
long rate;
|
||||
struct sdram_timings const *data;
|
||||
} nokia_timings[] = {
|
||||
{ 83000000, nokia_166mhz_timings },
|
||||
{ 97600000, nokia_97dot6mhz_timings },
|
||||
{ 100000000, nokia_200mhz_timings },
|
||||
{ 166000000, nokia_166mhz_timings },
|
||||
{ 195200000, nokia_195dot2mhz_timings },
|
||||
{ 200000000, nokia_200mhz_timings },
|
||||
};
|
||||
static struct omap_sdrc_params nokia_sdrc_params[ARRAY_SIZE(nokia_timings) + 1];
|
||||
|
||||
static unsigned long sdrc_get_fclk_period(long rate)
|
||||
{
|
||||
/* In picoseconds */
|
||||
return 1000000000 / rate;
|
||||
}
|
||||
|
||||
static unsigned int sdrc_ps_to_ticks(unsigned int time_ps, long rate)
|
||||
{
|
||||
unsigned long tick_ps;
|
||||
|
||||
/* Calculate in picosecs to yield more exact results */
|
||||
tick_ps = sdrc_get_fclk_period(rate);
|
||||
|
||||
return (time_ps + tick_ps - 1) / tick_ps;
|
||||
}
|
||||
#undef DEBUG
|
||||
#ifdef DEBUG
|
||||
static int set_sdrc_timing_regval(u32 *regval, int st_bit, int end_bit,
|
||||
int ticks, long rate, const char *name)
|
||||
#else
|
||||
static int set_sdrc_timing_regval(u32 *regval, int st_bit, int end_bit,
|
||||
int ticks)
|
||||
#endif
|
||||
{
|
||||
int mask, nr_bits;
|
||||
|
||||
nr_bits = end_bit - st_bit + 1;
|
||||
if (ticks >= 1 << nr_bits)
|
||||
return -1;
|
||||
mask = (1 << nr_bits) - 1;
|
||||
*regval &= ~(mask << st_bit);
|
||||
*regval |= ticks << st_bit;
|
||||
#ifdef DEBUG
|
||||
printk(KERN_INFO "SDRC %s: %i ticks %i ns\n", name, ticks,
|
||||
(unsigned int)sdrc_get_fclk_period(rate) * ticks /
|
||||
1000);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval((reg), (st), (end), \
|
||||
memory_timings->field, (rate), #field) < 0) \
|
||||
err = -1;
|
||||
#else
|
||||
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval((reg), (st), (end), \
|
||||
memory_timings->field) < 0) \
|
||||
err = -1;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
static int set_sdrc_timing_regval_ps(u32 *regval, int st_bit, int end_bit,
|
||||
int time, long rate, const char *name)
|
||||
#else
|
||||
static int set_sdrc_timing_regval_ps(u32 *regval, int st_bit, int end_bit,
|
||||
int time, long rate)
|
||||
#endif
|
||||
{
|
||||
int ticks, ret;
|
||||
ret = 0;
|
||||
|
||||
if (time == 0)
|
||||
ticks = 0;
|
||||
else
|
||||
ticks = sdrc_ps_to_ticks(time, rate);
|
||||
|
||||
#ifdef DEBUG
|
||||
ret = set_sdrc_timing_regval(regval, st_bit, end_bit, ticks,
|
||||
rate, name);
|
||||
#else
|
||||
ret = set_sdrc_timing_regval(regval, st_bit, end_bit, ticks);
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
||||
memory_timings->field, \
|
||||
(rate), #field) < 0) \
|
||||
err = -1;
|
||||
|
||||
#else
|
||||
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
||||
memory_timings->field, (rate)) < 0) \
|
||||
err = -1;
|
||||
#endif
|
||||
|
||||
static int sdrc_timings(int id, long rate,
|
||||
const struct sdram_timings *memory_timings)
|
||||
{
|
||||
u32 ticks_per_ms;
|
||||
u32 rfr, l;
|
||||
u32 actim_ctrla = 0, actim_ctrlb = 0;
|
||||
u32 rfr_ctrl;
|
||||
int err = 0;
|
||||
long l3_rate = rate / 1000;
|
||||
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 0, 4, tDAL, l3_rate);
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 6, 8, tDPL, l3_rate);
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 9, 11, tRRD, l3_rate);
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 12, 14, tRCD, l3_rate);
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 15, 17, tRP, l3_rate);
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 18, 21, tRAS, l3_rate);
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 22, 26, tRC, l3_rate);
|
||||
SDRC_SET_ONE_PS(&actim_ctrla, 27, 31, tRFC, l3_rate);
|
||||
|
||||
SDRC_SET_ONE_PS(&actim_ctrlb, 0, 7, tXSR, l3_rate);
|
||||
|
||||
SDRC_SET_ONE(&actim_ctrlb, 8, 10, tXP, l3_rate);
|
||||
SDRC_SET_ONE(&actim_ctrlb, 12, 14, tCKE, l3_rate);
|
||||
SDRC_SET_ONE(&actim_ctrlb, 16, 17, tWTR, l3_rate);
|
||||
|
||||
ticks_per_ms = l3_rate;
|
||||
rfr = memory_timings[0].tREF * ticks_per_ms / 1000000;
|
||||
if (rfr > 65535 + 50)
|
||||
rfr = 65535;
|
||||
else
|
||||
rfr -= 50;
|
||||
|
||||
#ifdef DEBUG
|
||||
printk(KERN_INFO "SDRC tREF: %i ticks\n", rfr);
|
||||
#endif
|
||||
|
||||
l = rfr << 8;
|
||||
rfr_ctrl = l | 0x1; /* autorefresh, reload counter with 1xARCV */
|
||||
|
||||
nokia_sdrc_params[id].rate = rate;
|
||||
nokia_sdrc_params[id].actim_ctrla = actim_ctrla;
|
||||
nokia_sdrc_params[id].actim_ctrlb = actim_ctrlb;
|
||||
nokia_sdrc_params[id].rfr_ctrl = rfr_ctrl;
|
||||
nokia_sdrc_params[id].mr = 0x32;
|
||||
|
||||
nokia_sdrc_params[id + 1].rate = 0;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
struct omap_sdrc_params *nokia_get_sdram_timings(void)
|
||||
{
|
||||
int err = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(nokia_timings); i++) {
|
||||
err |= sdrc_timings(i, nokia_timings[i].rate,
|
||||
nokia_timings[i].data);
|
||||
if (err)
|
||||
pr_err("%s: error with rate %ld: %d\n", __func__,
|
||||
nokia_timings[i].rate, err);
|
||||
}
|
||||
|
||||
return err ? NULL : nokia_sdrc_params;
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
/*
|
||||
* SDRC register values for Nokia boards
|
||||
*
|
||||
* Copyright (C) 2010 Nokia
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
struct omap_sdrc_params *nokia_get_sdram_timings(void);
|
||||
|
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* SDRC register values for the Numonyx M65KXXXXAM
|
||||
*
|
||||
* Copyright (C) 2009 Integration Software and Electronic Engineering.
|
||||
*
|
||||
* 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 __ARCH_ARM_MACH_OMAP2_SDRAM_NUMONYX_M65KXXXXAM
|
||||
#define __ARCH_ARM_MACH_OMAP2_SDRAM_NUMONYX_M65KXXXXAM
|
||||
|
||||
#include "sdrc.h"
|
||||
|
||||
/* Numonyx M65KXXXXAM */
|
||||
static struct omap_sdrc_params m65kxxxxam_sdrc_params[] = {
|
||||
[0] = {
|
||||
.rate = 200000000,
|
||||
.actim_ctrla = 0xe321d4c6,
|
||||
.actim_ctrlb = 0x00022328,
|
||||
.rfr_ctrl = 0x0005e601,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[1] = {
|
||||
.rate = 166000000,
|
||||
.actim_ctrla = 0xba9dc485,
|
||||
.actim_ctrlb = 0x00022321,
|
||||
.rfr_ctrl = 0x0004dc01,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[2] = {
|
||||
.rate = 133000000,
|
||||
.actim_ctrla = 0x9a19b485,
|
||||
.actim_ctrlb = 0x0002231b,
|
||||
.rfr_ctrl = 0x0003de01,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[3] = {
|
||||
.rate = 83000000,
|
||||
.actim_ctrla = 0x594ca242,
|
||||
.actim_ctrlb = 0x00022310,
|
||||
.rfr_ctrl = 0x00025501,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[4] = {
|
||||
.rate = 0
|
||||
},
|
||||
};
|
||||
|
||||
#endif
|
@ -1,54 +0,0 @@
|
||||
/*
|
||||
* SDRC register values for the Qimonda HYB18M512160AF-6
|
||||
*
|
||||
* Copyright (C) 2008-2009 Texas Instruments, Inc.
|
||||
* Copyright (C) 2008-2009 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley
|
||||
*
|
||||
* 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 ARCH_ARM_MACH_OMAP2_SDRAM_QIMONDA_HYB18M512160AF6
|
||||
#define ARCH_ARM_MACH_OMAP2_SDRAM_QIMONDA_HYB18M512160AF6
|
||||
|
||||
#include "sdrc.h"
|
||||
|
||||
/* Qimonda HYB18M512160AF-6 */
|
||||
static struct omap_sdrc_params hyb18m512160af6_sdrc_params[] = {
|
||||
[0] = {
|
||||
.rate = 166000000,
|
||||
.actim_ctrla = 0x629db4c6,
|
||||
.actim_ctrlb = 0x00012214,
|
||||
.rfr_ctrl = 0x0004dc01,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[1] = {
|
||||
.rate = 165941176,
|
||||
.actim_ctrla = 0x629db4c6,
|
||||
.actim_ctrlb = 0x00012214,
|
||||
.rfr_ctrl = 0x0004dc01,
|
||||
.mr = 0x00000032,
|
||||
},
|
||||
[2] = {
|
||||
.rate = 83000000,
|
||||
.actim_ctrla = 0x31512283,
|
||||
.actim_ctrlb = 0x0001220a,
|
||||
.rfr_ctrl = 0x00025501,
|
||||
.mr = 0x00000022,
|
||||
},
|
||||
[3] = {
|
||||
.rate = 82970588,
|
||||
.actim_ctrla = 0x31512283,
|
||||
.actim_ctrlb = 0x0001220a,
|
||||
.rfr_ctrl = 0x00025501,
|
||||
.mr = 0x00000022,
|
||||
},
|
||||
[4] = {
|
||||
.rate = 0
|
||||
},
|
||||
};
|
||||
|
||||
#endif
|
@ -1,332 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-omap2/serial.c
|
||||
*
|
||||
* OMAP2 serial support.
|
||||
*
|
||||
* Copyright (C) 2005-2008 Nokia Corporation
|
||||
* Author: Paul Mundt <paul.mundt@nokia.com>
|
||||
*
|
||||
* Major rework for PM support by Kevin Hilman
|
||||
*
|
||||
* Based off of arch/arm/mach-omap/omap1/serial.c
|
||||
*
|
||||
* Copyright (C) 2009 Texas Instruments
|
||||
* Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/omap-dma.h>
|
||||
#include <linux/platform_data/serial-omap.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "omap_hwmod.h"
|
||||
#include "omap_device.h"
|
||||
#include "omap-pm.h"
|
||||
#include "soc.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "pm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "control.h"
|
||||
#include "mux.h"
|
||||
#include "serial.h"
|
||||
|
||||
/*
|
||||
* NOTE: By default the serial auto_suspend timeout is disabled as it causes
|
||||
* lost characters over the serial ports. This means that the UART clocks will
|
||||
* stay on until power/autosuspend_delay is set for the uart from sysfs.
|
||||
* This also causes that any deeper omap sleep states are blocked.
|
||||
*/
|
||||
#define DEFAULT_AUTOSUSPEND_DELAY -1
|
||||
|
||||
#define MAX_UART_HWMOD_NAME_LEN 16
|
||||
|
||||
struct omap_uart_state {
|
||||
int num;
|
||||
|
||||
struct list_head node;
|
||||
struct omap_hwmod *oh;
|
||||
struct omap_device_pad default_omap_uart_pads[2];
|
||||
};
|
||||
|
||||
static LIST_HEAD(uart_list);
|
||||
static u8 num_uarts;
|
||||
static u8 console_uart_id = -1;
|
||||
static u8 uart_debug;
|
||||
|
||||
#define DEFAULT_RXDMA_POLLRATE 1 /* RX DMA polling rate (us) */
|
||||
#define DEFAULT_RXDMA_BUFSIZE 4096 /* RX DMA buffer size */
|
||||
#define DEFAULT_RXDMA_TIMEOUT (3 * HZ)/* RX DMA timeout (jiffies) */
|
||||
|
||||
static struct omap_uart_port_info omap_serial_default_info[] __initdata = {
|
||||
{
|
||||
.dma_enabled = false,
|
||||
.dma_rx_buf_size = DEFAULT_RXDMA_BUFSIZE,
|
||||
.dma_rx_poll_rate = DEFAULT_RXDMA_POLLRATE,
|
||||
.dma_rx_timeout = DEFAULT_RXDMA_TIMEOUT,
|
||||
.autosuspend_timeout = DEFAULT_AUTOSUSPEND_DELAY,
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static void omap_uart_enable_wakeup(struct device *dev, bool enable)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct omap_device *od = to_omap_device(pdev);
|
||||
|
||||
if (!od)
|
||||
return;
|
||||
|
||||
if (enable)
|
||||
omap_hwmod_enable_wakeup(od->hwmods[0]);
|
||||
else
|
||||
omap_hwmod_disable_wakeup(od->hwmods[0]);
|
||||
}
|
||||
|
||||
#else
|
||||
static void omap_uart_enable_wakeup(struct device *dev, bool enable)
|
||||
{}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#ifdef CONFIG_OMAP_MUX
|
||||
|
||||
#define OMAP_UART_DEFAULT_PAD_NAME_LEN 28
|
||||
static char rx_pad_name[OMAP_UART_DEFAULT_PAD_NAME_LEN],
|
||||
tx_pad_name[OMAP_UART_DEFAULT_PAD_NAME_LEN] __initdata;
|
||||
|
||||
static void __init
|
||||
omap_serial_fill_uart_tx_rx_pads(struct omap_board_data *bdata,
|
||||
struct omap_uart_state *uart)
|
||||
{
|
||||
uart->default_omap_uart_pads[0].name = rx_pad_name;
|
||||
uart->default_omap_uart_pads[0].flags = OMAP_DEVICE_PAD_REMUX |
|
||||
OMAP_DEVICE_PAD_WAKEUP;
|
||||
uart->default_omap_uart_pads[0].enable = OMAP_PIN_INPUT |
|
||||
OMAP_MUX_MODE0;
|
||||
uart->default_omap_uart_pads[0].idle = OMAP_PIN_INPUT | OMAP_MUX_MODE0;
|
||||
uart->default_omap_uart_pads[1].name = tx_pad_name;
|
||||
uart->default_omap_uart_pads[1].enable = OMAP_PIN_OUTPUT |
|
||||
OMAP_MUX_MODE0;
|
||||
bdata->pads = uart->default_omap_uart_pads;
|
||||
bdata->pads_cnt = ARRAY_SIZE(uart->default_omap_uart_pads);
|
||||
}
|
||||
|
||||
static void __init omap_serial_check_wakeup(struct omap_board_data *bdata,
|
||||
struct omap_uart_state *uart)
|
||||
{
|
||||
struct omap_mux_partition *tx_partition = NULL, *rx_partition = NULL;
|
||||
struct omap_mux *rx_mux = NULL, *tx_mux = NULL;
|
||||
char *rx_fmt, *tx_fmt;
|
||||
int uart_nr = bdata->id + 1;
|
||||
|
||||
if (bdata->id != 2) {
|
||||
rx_fmt = "uart%d_rx.uart%d_rx";
|
||||
tx_fmt = "uart%d_tx.uart%d_tx";
|
||||
} else {
|
||||
rx_fmt = "uart%d_rx_irrx.uart%d_rx_irrx";
|
||||
tx_fmt = "uart%d_tx_irtx.uart%d_tx_irtx";
|
||||
}
|
||||
|
||||
snprintf(rx_pad_name, OMAP_UART_DEFAULT_PAD_NAME_LEN, rx_fmt,
|
||||
uart_nr, uart_nr);
|
||||
snprintf(tx_pad_name, OMAP_UART_DEFAULT_PAD_NAME_LEN, tx_fmt,
|
||||
uart_nr, uart_nr);
|
||||
|
||||
if (omap_mux_get_by_name(rx_pad_name, &rx_partition, &rx_mux) >= 0 &&
|
||||
omap_mux_get_by_name
|
||||
(tx_pad_name, &tx_partition, &tx_mux) >= 0) {
|
||||
u16 tx_mode, rx_mode;
|
||||
|
||||
tx_mode = omap_mux_read(tx_partition, tx_mux->reg_offset);
|
||||
rx_mode = omap_mux_read(rx_partition, rx_mux->reg_offset);
|
||||
|
||||
/*
|
||||
* Check if uart is used in default tx/rx mode i.e. in mux mode0
|
||||
* if yes then configure rx pin for wake up capability
|
||||
*/
|
||||
if (OMAP_MODE_UART(rx_mode) && OMAP_MODE_UART(tx_mode))
|
||||
omap_serial_fill_uart_tx_rx_pads(bdata, uart);
|
||||
}
|
||||
}
|
||||
#else
|
||||
static void __init omap_serial_check_wakeup(struct omap_board_data *bdata,
|
||||
struct omap_uart_state *uart)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static char *cmdline_find_option(char *str)
|
||||
{
|
||||
extern char *saved_command_line;
|
||||
|
||||
return strstr(saved_command_line, str);
|
||||
}
|
||||
|
||||
static int __init omap_serial_early_init(void)
|
||||
{
|
||||
if (of_have_populated_dt())
|
||||
return -ENODEV;
|
||||
|
||||
do {
|
||||
char oh_name[MAX_UART_HWMOD_NAME_LEN];
|
||||
struct omap_hwmod *oh;
|
||||
struct omap_uart_state *uart;
|
||||
char uart_name[MAX_UART_HWMOD_NAME_LEN];
|
||||
|
||||
snprintf(oh_name, MAX_UART_HWMOD_NAME_LEN,
|
||||
"uart%d", num_uarts + 1);
|
||||
oh = omap_hwmod_lookup(oh_name);
|
||||
if (!oh)
|
||||
break;
|
||||
|
||||
uart = kzalloc(sizeof(struct omap_uart_state), GFP_KERNEL);
|
||||
if (WARN_ON(!uart))
|
||||
return -ENODEV;
|
||||
|
||||
uart->oh = oh;
|
||||
uart->num = num_uarts++;
|
||||
list_add_tail(&uart->node, &uart_list);
|
||||
snprintf(uart_name, MAX_UART_HWMOD_NAME_LEN,
|
||||
"%s%d", OMAP_SERIAL_NAME, uart->num);
|
||||
|
||||
if (cmdline_find_option(uart_name)) {
|
||||
console_uart_id = uart->num;
|
||||
|
||||
if (console_loglevel >= CONSOLE_LOGLEVEL_DEBUG) {
|
||||
uart_debug = true;
|
||||
pr_info("%s used as console in debug mode: uart%d clocks will not be gated",
|
||||
uart_name, uart->num);
|
||||
}
|
||||
}
|
||||
} while (1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
omap_postcore_initcall(omap_serial_early_init);
|
||||
|
||||
/**
|
||||
* omap_serial_init_port() - initialize single serial port
|
||||
* @bdata: port specific board data pointer
|
||||
* @info: platform specific data pointer
|
||||
*
|
||||
* This function initialies serial driver for given port only.
|
||||
* Platforms can call this function instead of omap_serial_init()
|
||||
* if they don't plan to use all available UARTs as serial ports.
|
||||
*
|
||||
* Don't mix calls to omap_serial_init_port() and omap_serial_init(),
|
||||
* use only one of the two.
|
||||
*/
|
||||
void __init omap_serial_init_port(struct omap_board_data *bdata,
|
||||
struct omap_uart_port_info *info)
|
||||
{
|
||||
struct omap_uart_state *uart;
|
||||
struct omap_hwmod *oh;
|
||||
struct platform_device *pdev;
|
||||
void *pdata = NULL;
|
||||
u32 pdata_size = 0;
|
||||
char *name;
|
||||
struct omap_uart_port_info omap_up;
|
||||
|
||||
if (WARN_ON(!bdata))
|
||||
return;
|
||||
if (WARN_ON(bdata->id < 0))
|
||||
return;
|
||||
if (WARN_ON(bdata->id >= num_uarts))
|
||||
return;
|
||||
|
||||
list_for_each_entry(uart, &uart_list, node)
|
||||
if (bdata->id == uart->num)
|
||||
break;
|
||||
if (!info)
|
||||
info = omap_serial_default_info;
|
||||
|
||||
oh = uart->oh;
|
||||
name = OMAP_SERIAL_DRIVER_NAME;
|
||||
|
||||
omap_up.dma_enabled = info->dma_enabled;
|
||||
omap_up.uartclk = OMAP24XX_BASE_BAUD * 16;
|
||||
omap_up.flags = UPF_BOOT_AUTOCONF;
|
||||
omap_up.get_context_loss_count = omap_pm_get_dev_context_loss_count;
|
||||
omap_up.enable_wakeup = omap_uart_enable_wakeup;
|
||||
omap_up.dma_rx_buf_size = info->dma_rx_buf_size;
|
||||
omap_up.dma_rx_timeout = info->dma_rx_timeout;
|
||||
omap_up.dma_rx_poll_rate = info->dma_rx_poll_rate;
|
||||
omap_up.autosuspend_timeout = info->autosuspend_timeout;
|
||||
|
||||
pdata = &omap_up;
|
||||
pdata_size = sizeof(struct omap_uart_port_info);
|
||||
|
||||
if (WARN_ON(!oh))
|
||||
return;
|
||||
|
||||
pdev = omap_device_build(name, uart->num, oh, pdata, pdata_size);
|
||||
if (IS_ERR(pdev)) {
|
||||
WARN(1, "Could not build omap_device for %s: %s.\n", name,
|
||||
oh->name);
|
||||
return;
|
||||
}
|
||||
|
||||
oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
|
||||
|
||||
if (console_uart_id == bdata->id) {
|
||||
omap_device_enable(pdev);
|
||||
pm_runtime_set_active(&pdev->dev);
|
||||
}
|
||||
|
||||
oh->dev_attr = uart;
|
||||
|
||||
if (((cpu_is_omap34xx() || cpu_is_omap44xx()) && bdata->pads)
|
||||
&& !uart_debug)
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_serial_board_init() - initialize all supported serial ports
|
||||
* @info: platform specific data pointer
|
||||
*
|
||||
* Initializes all available UARTs as serial ports. Platforms
|
||||
* can call this function when they want to have default behaviour
|
||||
* for serial ports (e.g initialize them all as serial ports).
|
||||
*/
|
||||
void __init omap_serial_board_init(struct omap_uart_port_info *info)
|
||||
{
|
||||
struct omap_uart_state *uart;
|
||||
struct omap_board_data bdata;
|
||||
|
||||
list_for_each_entry(uart, &uart_list, node) {
|
||||
bdata.id = uart->num;
|
||||
bdata.flags = 0;
|
||||
bdata.pads = NULL;
|
||||
bdata.pads_cnt = 0;
|
||||
|
||||
omap_serial_check_wakeup(&bdata, uart);
|
||||
|
||||
if (!info)
|
||||
omap_serial_init_port(&bdata, NULL);
|
||||
else
|
||||
omap_serial_init_port(&bdata, &info[uart->num]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_serial_init() - initialize all supported serial ports
|
||||
*
|
||||
* Initializes all available UARTs.
|
||||
* Platforms can call this function when they want to have default behaviour
|
||||
* for serial ports (e.g initialize them all as serial ports).
|
||||
*/
|
||||
void __init omap_serial_init(void)
|
||||
{
|
||||
omap_serial_board_init(NULL);
|
||||
}
|
@ -1,564 +0,0 @@
|
||||
/*
|
||||
* twl-common.c
|
||||
*
|
||||
* Copyright (C) 2011 Texas Instruments, Inc..
|
||||
* Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/phy/phy.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "twl-common.h"
|
||||
#include "pm.h"
|
||||
#include "voltage.h"
|
||||
#include "mux.h"
|
||||
|
||||
static struct i2c_board_info __initdata pmic_i2c_board_info = {
|
||||
.addr = 0x48,
|
||||
.flags = I2C_CLIENT_WAKE,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
|
||||
static int twl_set_voltage(void *data, int target_uV)
|
||||
{
|
||||
struct voltagedomain *voltdm = (struct voltagedomain *)data;
|
||||
return voltdm_scale(voltdm, target_uV);
|
||||
}
|
||||
|
||||
static int twl_get_voltage(void *data)
|
||||
{
|
||||
struct voltagedomain *voltdm = (struct voltagedomain *)data;
|
||||
return voltdm_get_voltage(voltdm);
|
||||
}
|
||||
#endif
|
||||
|
||||
void __init omap_pmic_init(int bus, u32 clkrate,
|
||||
const char *pmic_type, int pmic_irq,
|
||||
struct twl4030_platform_data *pmic_data)
|
||||
{
|
||||
omap_mux_init_signal("sys_nirq", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE);
|
||||
strlcpy(pmic_i2c_board_info.type, pmic_type,
|
||||
sizeof(pmic_i2c_board_info.type));
|
||||
pmic_i2c_board_info.irq = pmic_irq;
|
||||
pmic_i2c_board_info.platform_data = pmic_data;
|
||||
|
||||
omap_register_i2c_bus(bus, clkrate, &pmic_i2c_board_info, 1);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
void __init omap4_pmic_init(const char *pmic_type,
|
||||
struct twl4030_platform_data *pmic_data,
|
||||
struct i2c_board_info *devices, int nr_devices)
|
||||
{
|
||||
/* PMIC part*/
|
||||
unsigned int irq;
|
||||
|
||||
omap_mux_init_signal("sys_nirq1", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE);
|
||||
omap_mux_init_signal("fref_clk0_out.sys_drm_msecure", OMAP_PIN_OUTPUT);
|
||||
irq = omap4_xlate_irq(7 + OMAP44XX_IRQ_GIC_START);
|
||||
omap_pmic_init(1, 400, pmic_type, irq, pmic_data);
|
||||
|
||||
/* Register additional devices on i2c1 bus if needed */
|
||||
if (devices)
|
||||
i2c_register_board_info(1, devices, nr_devices);
|
||||
}
|
||||
#endif
|
||||
|
||||
void __init omap_pmic_late_init(void)
|
||||
{
|
||||
/* Init the OMAP TWL parameters (if PMIC has been registerd) */
|
||||
if (!pmic_i2c_board_info.irq)
|
||||
return;
|
||||
|
||||
omap3_twl_init();
|
||||
omap4_twl_init();
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3)
|
||||
static struct twl4030_usb_data omap3_usb_pdata = {
|
||||
.usb_mode = T2_USB_MODE_ULPI,
|
||||
};
|
||||
|
||||
static int omap3_batt_table[] = {
|
||||
/* 0 C */
|
||||
30800, 29500, 28300, 27100,
|
||||
26000, 24900, 23900, 22900, 22000, 21100, 20300, 19400, 18700, 17900,
|
||||
17200, 16500, 15900, 15300, 14700, 14100, 13600, 13100, 12600, 12100,
|
||||
11600, 11200, 10800, 10400, 10000, 9630, 9280, 8950, 8620, 8310,
|
||||
8020, 7730, 7460, 7200, 6950, 6710, 6470, 6250, 6040, 5830,
|
||||
5640, 5450, 5260, 5090, 4920, 4760, 4600, 4450, 4310, 4170,
|
||||
4040, 3910, 3790, 3670, 3550
|
||||
};
|
||||
|
||||
static struct twl4030_bci_platform_data omap3_bci_pdata = {
|
||||
.battery_tmp_tbl = omap3_batt_table,
|
||||
.tblsize = ARRAY_SIZE(omap3_batt_table),
|
||||
};
|
||||
|
||||
static struct twl4030_madc_platform_data omap3_madc_pdata = {
|
||||
.irq_line = 1,
|
||||
};
|
||||
|
||||
static struct twl4030_codec_data omap3_codec;
|
||||
|
||||
static struct twl4030_audio_data omap3_audio_pdata = {
|
||||
.audio_mclk = 26000000,
|
||||
.codec = &omap3_codec,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap3_vdda_dac_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap3_vdac_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap3_vdda_dac_supplies),
|
||||
.consumer_supplies = omap3_vdda_dac_supplies,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap3_vpll2_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
|
||||
REGULATOR_SUPPLY("vdds_dsi", "omapdss_dpi.0"),
|
||||
REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap3_vpll2_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap3_vpll2_supplies),
|
||||
.consumer_supplies = omap3_vpll2_supplies,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap3_vdd1_supply[] = {
|
||||
REGULATOR_SUPPLY("vcc", "cpu0"),
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap3_vdd2_supply[] = {
|
||||
REGULATOR_SUPPLY("vcc", "l3_main.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap3_vdd1 = {
|
||||
.constraints = {
|
||||
.name = "vdd_mpu_iva",
|
||||
.min_uV = 600000,
|
||||
.max_uV = 1450000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap3_vdd1_supply),
|
||||
.consumer_supplies = omap3_vdd1_supply,
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap3_vdd2 = {
|
||||
.constraints = {
|
||||
.name = "vdd_core",
|
||||
.min_uV = 600000,
|
||||
.max_uV = 1450000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap3_vdd2_supply),
|
||||
.consumer_supplies = omap3_vdd2_supply,
|
||||
};
|
||||
|
||||
static struct twl_regulator_driver_data omap3_vdd1_drvdata = {
|
||||
.get_voltage = twl_get_voltage,
|
||||
.set_voltage = twl_set_voltage,
|
||||
};
|
||||
|
||||
static struct twl_regulator_driver_data omap3_vdd2_drvdata = {
|
||||
.get_voltage = twl_get_voltage,
|
||||
.set_voltage = twl_set_voltage,
|
||||
};
|
||||
|
||||
void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data,
|
||||
u32 pdata_flags, u32 regulators_flags)
|
||||
{
|
||||
if (!pmic_data->vdd1) {
|
||||
omap3_vdd1.driver_data = &omap3_vdd1_drvdata;
|
||||
omap3_vdd1_drvdata.data = voltdm_lookup("mpu_iva");
|
||||
pmic_data->vdd1 = &omap3_vdd1;
|
||||
}
|
||||
if (!pmic_data->vdd2) {
|
||||
omap3_vdd2.driver_data = &omap3_vdd2_drvdata;
|
||||
omap3_vdd2_drvdata.data = voltdm_lookup("core");
|
||||
pmic_data->vdd2 = &omap3_vdd2;
|
||||
}
|
||||
|
||||
/* Common platform data configurations */
|
||||
if (pdata_flags & TWL_COMMON_PDATA_USB && !pmic_data->usb)
|
||||
pmic_data->usb = &omap3_usb_pdata;
|
||||
|
||||
if (pdata_flags & TWL_COMMON_PDATA_BCI && !pmic_data->bci)
|
||||
pmic_data->bci = &omap3_bci_pdata;
|
||||
|
||||
if (pdata_flags & TWL_COMMON_PDATA_MADC && !pmic_data->madc)
|
||||
pmic_data->madc = &omap3_madc_pdata;
|
||||
|
||||
if (pdata_flags & TWL_COMMON_PDATA_AUDIO && !pmic_data->audio)
|
||||
pmic_data->audio = &omap3_audio_pdata;
|
||||
|
||||
/* Common regulator configurations */
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac)
|
||||
pmic_data->vdac = &omap3_vdac_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VPLL2 && !pmic_data->vpll2)
|
||||
pmic_data->vpll2 = &omap3_vpll2_idata;
|
||||
}
|
||||
#endif /* CONFIG_ARCH_OMAP3 */
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP4)
|
||||
static struct twl4030_usb_data omap4_usb_pdata = {
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_vdda_hdmi_dac_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdda_hdmi_dac", "omapdss_hdmi"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vdac_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_vdda_hdmi_dac_supplies),
|
||||
.consumer_supplies = omap4_vdda_hdmi_dac_supplies,
|
||||
.supply_regulator = "V2V1",
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vaux2_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1200000,
|
||||
.max_uV = 2800000,
|
||||
.apply_uV = true,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
||||
| REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vaux3_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1000000,
|
||||
.max_uV = 3000000,
|
||||
.apply_uV = true,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
||||
| REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_vmmc_supply[] = {
|
||||
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
|
||||
};
|
||||
|
||||
/* VMMC1 for MMC1 card */
|
||||
static struct regulator_init_data omap4_vmmc_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1200000,
|
||||
.max_uV = 3000000,
|
||||
.apply_uV = true,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
||||
| REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_vmmc_supply),
|
||||
.consumer_supplies = omap4_vmmc_supply,
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vpp_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 2500000,
|
||||
.apply_uV = true,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
||||
| REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vana_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 2100000,
|
||||
.max_uV = 2100000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_vcxio_supply[] = {
|
||||
REGULATOR_SUPPLY("vdds_dsi", "omapdss_dss"),
|
||||
REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"),
|
||||
REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.1"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vcxio_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
.always_on = true,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_vcxio_supply),
|
||||
.consumer_supplies = omap4_vcxio_supply,
|
||||
.supply_regulator = "V2V1",
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vusb_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 3300000,
|
||||
.max_uV = 3300000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_clk32kg_idata = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_vdd1_supply[] = {
|
||||
REGULATOR_SUPPLY("vcc", "cpu0"),
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_vdd2_supply[] = {
|
||||
REGULATOR_SUPPLY("vcc", "iva.0"),
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_vdd3_supply[] = {
|
||||
REGULATOR_SUPPLY("vcc", "l3_main.0"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vdd1 = {
|
||||
.constraints = {
|
||||
.name = "vdd_mpu",
|
||||
.min_uV = 500000,
|
||||
.max_uV = 1500000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_vdd1_supply),
|
||||
.consumer_supplies = omap4_vdd1_supply,
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vdd2 = {
|
||||
.constraints = {
|
||||
.name = "vdd_iva",
|
||||
.min_uV = 500000,
|
||||
.max_uV = 1500000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_vdd2_supply),
|
||||
.consumer_supplies = omap4_vdd2_supply,
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_vdd3 = {
|
||||
.constraints = {
|
||||
.name = "vdd_core",
|
||||
.min_uV = 500000,
|
||||
.max_uV = 1500000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_vdd3_supply),
|
||||
.consumer_supplies = omap4_vdd3_supply,
|
||||
};
|
||||
|
||||
|
||||
static struct twl_regulator_driver_data omap4_vdd1_drvdata = {
|
||||
.get_voltage = twl_get_voltage,
|
||||
.set_voltage = twl_set_voltage,
|
||||
};
|
||||
|
||||
static struct twl_regulator_driver_data omap4_vdd2_drvdata = {
|
||||
.get_voltage = twl_get_voltage,
|
||||
.set_voltage = twl_set_voltage,
|
||||
};
|
||||
|
||||
static struct twl_regulator_driver_data omap4_vdd3_drvdata = {
|
||||
.get_voltage = twl_get_voltage,
|
||||
.set_voltage = twl_set_voltage,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_v1v8_supply[] = {
|
||||
REGULATOR_SUPPLY("vio", "1-004b"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_v1v8_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
.always_on = true,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_v1v8_supply),
|
||||
.consumer_supplies = omap4_v1v8_supply,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply omap4_v2v1_supply[] = {
|
||||
REGULATOR_SUPPLY("v2v1", "1-004b"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data omap4_v2v1_idata = {
|
||||
.constraints = {
|
||||
.min_uV = 2100000,
|
||||
.max_uV = 2100000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(omap4_v2v1_supply),
|
||||
.consumer_supplies = omap4_v2v1_supply,
|
||||
};
|
||||
|
||||
void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data,
|
||||
u32 pdata_flags, u32 regulators_flags)
|
||||
{
|
||||
if (!pmic_data->vdd1) {
|
||||
omap4_vdd1.driver_data = &omap4_vdd1_drvdata;
|
||||
omap4_vdd1_drvdata.data = voltdm_lookup("mpu");
|
||||
pmic_data->vdd1 = &omap4_vdd1;
|
||||
}
|
||||
|
||||
if (!pmic_data->vdd2) {
|
||||
omap4_vdd2.driver_data = &omap4_vdd2_drvdata;
|
||||
omap4_vdd2_drvdata.data = voltdm_lookup("iva");
|
||||
pmic_data->vdd2 = &omap4_vdd2;
|
||||
}
|
||||
|
||||
if (!pmic_data->vdd3) {
|
||||
omap4_vdd3.driver_data = &omap4_vdd3_drvdata;
|
||||
omap4_vdd3_drvdata.data = voltdm_lookup("core");
|
||||
pmic_data->vdd3 = &omap4_vdd3;
|
||||
}
|
||||
|
||||
/* Common platform data configurations */
|
||||
if (pdata_flags & TWL_COMMON_PDATA_USB && !pmic_data->usb)
|
||||
pmic_data->usb = &omap4_usb_pdata;
|
||||
|
||||
/* Common regulator configurations */
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac)
|
||||
pmic_data->vdac = &omap4_vdac_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VAUX2 && !pmic_data->vaux2)
|
||||
pmic_data->vaux2 = &omap4_vaux2_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VAUX3 && !pmic_data->vaux3)
|
||||
pmic_data->vaux3 = &omap4_vaux3_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VMMC && !pmic_data->vmmc)
|
||||
pmic_data->vmmc = &omap4_vmmc_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VPP && !pmic_data->vpp)
|
||||
pmic_data->vpp = &omap4_vpp_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VANA && !pmic_data->vana)
|
||||
pmic_data->vana = &omap4_vana_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VCXIO && !pmic_data->vcxio)
|
||||
pmic_data->vcxio = &omap4_vcxio_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_VUSB && !pmic_data->vusb)
|
||||
pmic_data->vusb = &omap4_vusb_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_CLK32KG &&
|
||||
!pmic_data->clk32kg)
|
||||
pmic_data->clk32kg = &omap4_clk32kg_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_V1V8 && !pmic_data->v1v8)
|
||||
pmic_data->v1v8 = &omap4_v1v8_idata;
|
||||
|
||||
if (regulators_flags & TWL_COMMON_REGULATOR_V2V1 && !pmic_data->v2v1)
|
||||
pmic_data->v2v1 = &omap4_v2v1_idata;
|
||||
}
|
||||
#endif /* CONFIG_ARCH_OMAP4 */
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_OMAP_SOC_OMAP_TWL4030)
|
||||
#include <linux/platform_data/omap-twl4030.h>
|
||||
|
||||
/* Commonly used configuration */
|
||||
static struct omap_tw4030_pdata omap_twl4030_audio_data;
|
||||
|
||||
static struct platform_device audio_device = {
|
||||
.name = "omap-twl4030",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
void omap_twl4030_audio_init(char *card_name,
|
||||
struct omap_tw4030_pdata *pdata)
|
||||
{
|
||||
if (!pdata)
|
||||
pdata = &omap_twl4030_audio_data;
|
||||
|
||||
pdata->card_name = card_name;
|
||||
|
||||
audio_device.dev.platform_data = pdata;
|
||||
platform_device_register(&audio_device);
|
||||
}
|
||||
|
||||
#else /* SOC_OMAP_TWL4030 */
|
||||
void omap_twl4030_audio_init(char *card_name,
|
||||
struct omap_tw4030_pdata *pdata)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif /* SOC_OMAP_TWL4030 */
|
@ -1,66 +0,0 @@
|
||||
#ifndef __OMAP_PMIC_COMMON__
|
||||
#define __OMAP_PMIC_COMMON__
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define TWL_COMMON_PDATA_USB (1 << 0)
|
||||
#define TWL_COMMON_PDATA_BCI (1 << 1)
|
||||
#define TWL_COMMON_PDATA_MADC (1 << 2)
|
||||
#define TWL_COMMON_PDATA_AUDIO (1 << 3)
|
||||
|
||||
/* Common LDO regulators for TWL4030/TWL6030 */
|
||||
#define TWL_COMMON_REGULATOR_VDAC (1 << 0)
|
||||
#define TWL_COMMON_REGULATOR_VAUX1 (1 << 1)
|
||||
#define TWL_COMMON_REGULATOR_VAUX2 (1 << 2)
|
||||
#define TWL_COMMON_REGULATOR_VAUX3 (1 << 3)
|
||||
|
||||
/* TWL6030 LDO regulators */
|
||||
#define TWL_COMMON_REGULATOR_VMMC (1 << 4)
|
||||
#define TWL_COMMON_REGULATOR_VPP (1 << 5)
|
||||
#define TWL_COMMON_REGULATOR_VUSIM (1 << 6)
|
||||
#define TWL_COMMON_REGULATOR_VANA (1 << 7)
|
||||
#define TWL_COMMON_REGULATOR_VCXIO (1 << 8)
|
||||
#define TWL_COMMON_REGULATOR_VUSB (1 << 9)
|
||||
#define TWL_COMMON_REGULATOR_CLK32KG (1 << 10)
|
||||
#define TWL_COMMON_REGULATOR_V1V8 (1 << 11)
|
||||
#define TWL_COMMON_REGULATOR_V2V1 (1 << 12)
|
||||
|
||||
/* TWL4030 LDO regulators */
|
||||
#define TWL_COMMON_REGULATOR_VPLL1 (1 << 4)
|
||||
#define TWL_COMMON_REGULATOR_VPLL2 (1 << 5)
|
||||
|
||||
|
||||
struct twl4030_platform_data;
|
||||
struct twl6040_platform_data;
|
||||
struct omap_tw4030_pdata;
|
||||
struct i2c_board_info;
|
||||
|
||||
void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq,
|
||||
struct twl4030_platform_data *pmic_data);
|
||||
void omap_pmic_late_init(void);
|
||||
|
||||
static inline void omap2_pmic_init(const char *pmic_type,
|
||||
struct twl4030_platform_data *pmic_data)
|
||||
{
|
||||
omap_pmic_init(2, 2600, pmic_type, 7 + OMAP_INTC_START, pmic_data);
|
||||
}
|
||||
|
||||
static inline void omap3_pmic_init(const char *pmic_type,
|
||||
struct twl4030_platform_data *pmic_data)
|
||||
{
|
||||
omap_pmic_init(1, 2600, pmic_type, 7 + OMAP_INTC_START, pmic_data);
|
||||
}
|
||||
|
||||
void omap4_pmic_init(const char *pmic_type,
|
||||
struct twl4030_platform_data *pmic_data,
|
||||
struct i2c_board_info *devices, int nr_devices);
|
||||
|
||||
void omap3_pmic_get_config(struct twl4030_platform_data *pmic_data,
|
||||
u32 pdata_flags, u32 regulators_flags);
|
||||
|
||||
void omap4_pmic_get_config(struct twl4030_platform_data *pmic_data,
|
||||
u32 pdata_flags, u32 regulators_flags);
|
||||
|
||||
void omap_twl4030_audio_init(char *card_name, struct omap_tw4030_pdata *pdata);
|
||||
|
||||
#endif /* __OMAP_PMIC_COMMON__ */
|
@ -1,496 +0,0 @@
|
||||
/*
|
||||
* usb-host.c - OMAP USB Host
|
||||
*
|
||||
* This file will contain the board specific details for the
|
||||
* Synopsys EHCI/OHCI host controller on OMAP3430 and onwards
|
||||
*
|
||||
* Copyright (C) 2007-2011 Texas Instruments
|
||||
* Author: Vikram Pandita <vikram.pandita@ti.com>
|
||||
* Author: Keshava Munegowda <keshava_mgowda@ti.com>
|
||||
*
|
||||
* Generalization by:
|
||||
* Felipe Balbi <balbi@ti.com>
|
||||
*
|
||||
* 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/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/usb/phy.h>
|
||||
#include <linux/usb/usb_phy_generic.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "omap_device.h"
|
||||
#include "mux.h"
|
||||
#include "usb.h"
|
||||
|
||||
#ifdef CONFIG_MFD_OMAP_USB_HOST
|
||||
|
||||
#define OMAP_USBHS_DEVICE "usbhs_omap"
|
||||
#define OMAP_USBTLL_DEVICE "usbhs_tll"
|
||||
#define USBHS_UHH_HWMODNAME "usb_host_hs"
|
||||
#define USBHS_TLL_HWMODNAME "usb_tll_hs"
|
||||
|
||||
/* MUX settings for EHCI pins */
|
||||
/*
|
||||
* setup_ehci_io_mux - initialize IO pad mux for USBHOST
|
||||
*/
|
||||
static void __init setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
{
|
||||
switch (port_mode[0]) {
|
||||
case OMAP_EHCI_PORT_MODE_PHY:
|
||||
omap_mux_init_signal("hsusb1_stp", OMAP_PIN_OUTPUT);
|
||||
omap_mux_init_signal("hsusb1_clk", OMAP_PIN_OUTPUT);
|
||||
omap_mux_init_signal("hsusb1_dir", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_nxt", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data0", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data1", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data2", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data3", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data4", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data5", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data6", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_data7", OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_EHCI_PORT_MODE_TLL:
|
||||
omap_mux_init_signal("hsusb1_tll_stp",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("hsusb1_tll_clk",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_dir",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_nxt",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data0",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data1",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data2",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data3",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data4",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data5",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data6",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb1_tll_data7",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_USBHS_PORT_MODE_UNUSED:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (port_mode[1]) {
|
||||
case OMAP_EHCI_PORT_MODE_PHY:
|
||||
omap_mux_init_signal("hsusb2_stp", OMAP_PIN_OUTPUT);
|
||||
omap_mux_init_signal("hsusb2_clk", OMAP_PIN_OUTPUT);
|
||||
omap_mux_init_signal("hsusb2_dir", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_nxt", OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data0",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data1",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data2",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data3",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data4",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data5",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data6",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_data7",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_EHCI_PORT_MODE_TLL:
|
||||
omap_mux_init_signal("hsusb2_tll_stp",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("hsusb2_tll_clk",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_dir",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_nxt",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data0",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data1",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data2",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data3",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data4",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data5",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data6",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb2_tll_data7",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_USBHS_PORT_MODE_UNUSED:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (port_mode[2]) {
|
||||
case OMAP_EHCI_PORT_MODE_PHY:
|
||||
printk(KERN_WARNING "Port3 can't be used in PHY mode\n");
|
||||
break;
|
||||
case OMAP_EHCI_PORT_MODE_TLL:
|
||||
omap_mux_init_signal("hsusb3_tll_stp",
|
||||
OMAP_PIN_INPUT_PULLUP);
|
||||
omap_mux_init_signal("hsusb3_tll_clk",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_dir",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_nxt",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data0",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data1",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data2",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data3",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data4",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data5",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data6",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("hsusb3_tll_data7",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_USBHS_PORT_MODE_UNUSED:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void __init setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
{
|
||||
switch (port_mode[0]) {
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
|
||||
omap_mux_init_signal("mm1_rxdp",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("mm1_rxdm",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
|
||||
omap_mux_init_signal("mm1_rxrcv",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
|
||||
omap_mux_init_signal("mm1_txen_n", OMAP_PIN_OUTPUT);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
|
||||
omap_mux_init_signal("mm1_txse0",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("mm1_txdat",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_USBHS_PORT_MODE_UNUSED:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (port_mode[1]) {
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
|
||||
omap_mux_init_signal("mm2_rxdp",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("mm2_rxdm",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
|
||||
omap_mux_init_signal("mm2_rxrcv",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
|
||||
omap_mux_init_signal("mm2_txen_n", OMAP_PIN_OUTPUT);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
|
||||
omap_mux_init_signal("mm2_txse0",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("mm2_txdat",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_USBHS_PORT_MODE_UNUSED:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (port_mode[2]) {
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
|
||||
omap_mux_init_signal("mm3_rxdp",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("mm3_rxdm",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
|
||||
omap_mux_init_signal("mm3_rxrcv",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
|
||||
omap_mux_init_signal("mm3_txen_n", OMAP_PIN_OUTPUT);
|
||||
/* FALLTHROUGH */
|
||||
case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
|
||||
case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
|
||||
omap_mux_init_signal("mm3_txse0",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
omap_mux_init_signal("mm3_txdat",
|
||||
OMAP_PIN_INPUT_PULLDOWN);
|
||||
break;
|
||||
case OMAP_USBHS_PORT_MODE_UNUSED:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void __init usbhs_init(struct usbhs_omap_platform_data *pdata)
|
||||
{
|
||||
struct omap_hwmod *uhh_hwm, *tll_hwm;
|
||||
struct platform_device *pdev;
|
||||
int bus_id = -1;
|
||||
|
||||
if (cpu_is_omap34xx()) {
|
||||
setup_ehci_io_mux(pdata->port_mode);
|
||||
setup_ohci_io_mux(pdata->port_mode);
|
||||
|
||||
if (omap_rev() <= OMAP3430_REV_ES2_1)
|
||||
pdata->single_ulpi_bypass = true;
|
||||
|
||||
}
|
||||
|
||||
uhh_hwm = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
|
||||
if (!uhh_hwm) {
|
||||
pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
|
||||
return;
|
||||
}
|
||||
|
||||
tll_hwm = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
|
||||
if (!tll_hwm) {
|
||||
pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
|
||||
return;
|
||||
}
|
||||
|
||||
pdev = omap_device_build(OMAP_USBTLL_DEVICE, bus_id, tll_hwm,
|
||||
pdata, sizeof(*pdata));
|
||||
if (IS_ERR(pdev)) {
|
||||
pr_err("Could not build hwmod device %s\n",
|
||||
USBHS_TLL_HWMODNAME);
|
||||
return;
|
||||
}
|
||||
|
||||
pdev = omap_device_build(OMAP_USBHS_DEVICE, bus_id, uhh_hwm,
|
||||
pdata, sizeof(*pdata));
|
||||
if (IS_ERR(pdev)) {
|
||||
pr_err("Could not build hwmod devices %s\n",
|
||||
USBHS_UHH_HWMODNAME);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void __init usbhs_init(struct usbhs_omap_platform_data *pdata)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* Template for PHY regulators */
|
||||
static struct fixed_voltage_config hsusb_reg_config = {
|
||||
/* .supply_name filled later */
|
||||
.microvolts = 3300000,
|
||||
.gpio = -1, /* updated later */
|
||||
.startup_delay = 70000, /* 70msec */
|
||||
.enable_high = 1, /* updated later */
|
||||
.enabled_at_boot = 0, /* keep in RESET */
|
||||
/* .init_data filled later */
|
||||
};
|
||||
|
||||
static const char *nop_name = "usb_phy_generic"; /* NOP PHY driver */
|
||||
static const char *reg_name = "reg-fixed-voltage"; /* Regulator driver */
|
||||
|
||||
/**
|
||||
* usbhs_add_regulator - Add a gpio based fixed voltage regulator device
|
||||
* @name: name for the regulator
|
||||
* @dev_id: device id of the device this regulator supplies power to
|
||||
* @dev_supply: supply name that the device expects
|
||||
* @gpio: GPIO number
|
||||
* @polarity: 1 - Active high, 0 - Active low
|
||||
*/
|
||||
static int usbhs_add_regulator(char *name, char *dev_id, char *dev_supply,
|
||||
int gpio, int polarity)
|
||||
{
|
||||
struct regulator_consumer_supply *supplies;
|
||||
struct regulator_init_data *reg_data;
|
||||
struct fixed_voltage_config *config;
|
||||
struct platform_device *pdev;
|
||||
struct platform_device_info pdevinfo;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
supplies = kzalloc(sizeof(*supplies), GFP_KERNEL);
|
||||
if (!supplies)
|
||||
return -ENOMEM;
|
||||
|
||||
supplies->supply = dev_supply;
|
||||
supplies->dev_name = dev_id;
|
||||
|
||||
reg_data = kzalloc(sizeof(*reg_data), GFP_KERNEL);
|
||||
if (!reg_data)
|
||||
goto err_data;
|
||||
|
||||
reg_data->constraints.valid_ops_mask = REGULATOR_CHANGE_STATUS;
|
||||
reg_data->consumer_supplies = supplies;
|
||||
reg_data->num_consumer_supplies = 1;
|
||||
|
||||
config = kmemdup(&hsusb_reg_config, sizeof(hsusb_reg_config),
|
||||
GFP_KERNEL);
|
||||
if (!config)
|
||||
goto err_config;
|
||||
|
||||
config->supply_name = kstrdup(name, GFP_KERNEL);
|
||||
if (!config->supply_name)
|
||||
goto err_supplyname;
|
||||
|
||||
config->gpio = gpio;
|
||||
config->enable_high = polarity;
|
||||
config->init_data = reg_data;
|
||||
|
||||
/* create a regulator device */
|
||||
memset(&pdevinfo, 0, sizeof(pdevinfo));
|
||||
pdevinfo.name = reg_name;
|
||||
pdevinfo.id = PLATFORM_DEVID_AUTO;
|
||||
pdevinfo.data = config;
|
||||
pdevinfo.size_data = sizeof(*config);
|
||||
|
||||
pdev = platform_device_register_full(&pdevinfo);
|
||||
if (IS_ERR(pdev)) {
|
||||
ret = PTR_ERR(pdev);
|
||||
pr_err("%s: Failed registering regulator %s for %s : %d\n",
|
||||
__func__, name, dev_id, ret);
|
||||
goto err_register;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_register:
|
||||
kfree(config->supply_name);
|
||||
err_supplyname:
|
||||
kfree(config);
|
||||
err_config:
|
||||
kfree(reg_data);
|
||||
err_data:
|
||||
kfree(supplies);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define MAX_STR 20
|
||||
|
||||
int usbhs_init_phys(struct usbhs_phy_data *phy, int num_phys)
|
||||
{
|
||||
char rail_name[MAX_STR];
|
||||
int i;
|
||||
struct platform_device *pdev;
|
||||
char *phy_id;
|
||||
struct platform_device_info pdevinfo;
|
||||
struct usb_phy_generic_platform_data nop_pdata;
|
||||
|
||||
for (i = 0; i < num_phys; i++) {
|
||||
|
||||
if (!phy->port) {
|
||||
pr_err("%s: Invalid port 0. Must start from 1\n",
|
||||
__func__);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* do we need a NOP PHY device ? */
|
||||
if (!gpio_is_valid(phy->reset_gpio) &&
|
||||
!gpio_is_valid(phy->vcc_gpio))
|
||||
continue;
|
||||
|
||||
phy_id = kmalloc(MAX_STR, GFP_KERNEL);
|
||||
if (!phy_id) {
|
||||
pr_err("%s: kmalloc() failed\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* set platform data */
|
||||
memset(&nop_pdata, 0, sizeof(nop_pdata));
|
||||
if (gpio_is_valid(phy->vcc_gpio))
|
||||
nop_pdata.needs_vcc = true;
|
||||
nop_pdata.gpio_reset = phy->reset_gpio;
|
||||
nop_pdata.type = USB_PHY_TYPE_USB2;
|
||||
|
||||
/* create a NOP PHY device */
|
||||
memset(&pdevinfo, 0, sizeof(pdevinfo));
|
||||
pdevinfo.name = nop_name;
|
||||
pdevinfo.id = phy->port;
|
||||
pdevinfo.data = &nop_pdata;
|
||||
pdevinfo.size_data =
|
||||
sizeof(struct usb_phy_generic_platform_data);
|
||||
scnprintf(phy_id, MAX_STR, "usb_phy_generic.%d",
|
||||
phy->port);
|
||||
pdev = platform_device_register_full(&pdevinfo);
|
||||
if (IS_ERR(pdev)) {
|
||||
pr_err("%s: Failed to register device %s : %ld\n",
|
||||
__func__, phy_id, PTR_ERR(pdev));
|
||||
kfree(phy_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
usb_bind_phy("ehci-omap.0", phy->port - 1, phy_id);
|
||||
|
||||
/* Do we need VCC regulator ? */
|
||||
if (gpio_is_valid(phy->vcc_gpio)) {
|
||||
scnprintf(rail_name, MAX_STR, "hsusb%d_vcc", phy->port);
|
||||
usbhs_add_regulator(rail_name, phy_id, "vcc",
|
||||
phy->vcc_gpio, phy->vcc_polarity);
|
||||
}
|
||||
|
||||
phy++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,106 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-omap2/usb-musb.c
|
||||
*
|
||||
* This file will contain the board specific details for the
|
||||
* MENTOR USB OTG controller on OMAP3430
|
||||
*
|
||||
* Copyright (C) 2007-2008 Texas Instruments
|
||||
* Copyright (C) 2008 Nokia Corporation
|
||||
* Author: Vikram Pandita
|
||||
*
|
||||
* Generalization by:
|
||||
* Felipe Balbi <felipe.balbi@nokia.com>
|
||||
*
|
||||
* 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/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/usb/musb.h>
|
||||
|
||||
#include "omap_device.h"
|
||||
#include "soc.h"
|
||||
#include "mux.h"
|
||||
#include "usb.h"
|
||||
|
||||
static struct musb_hdrc_config musb_config = {
|
||||
.multipoint = 1,
|
||||
.dyn_fifo = 1,
|
||||
.num_eps = 16,
|
||||
.ram_bits = 12,
|
||||
};
|
||||
|
||||
static struct musb_hdrc_platform_data musb_plat = {
|
||||
.mode = MUSB_OTG,
|
||||
|
||||
/* .clock is set dynamically */
|
||||
.config = &musb_config,
|
||||
|
||||
/* REVISIT charge pump on TWL4030 can supply up to
|
||||
* 100 mA ... but this value is board-specific, like
|
||||
* "mode", and should be passed to usb_musb_init().
|
||||
*/
|
||||
.power = 50, /* up to 100 mA */
|
||||
};
|
||||
|
||||
static u64 musb_dmamask = DMA_BIT_MASK(32);
|
||||
|
||||
static struct omap_musb_board_data musb_default_board_data = {
|
||||
.interface_type = MUSB_INTERFACE_ULPI,
|
||||
.mode = MUSB_OTG,
|
||||
.power = 100,
|
||||
};
|
||||
|
||||
void __init usb_musb_init(struct omap_musb_board_data *musb_board_data)
|
||||
{
|
||||
struct omap_hwmod *oh;
|
||||
struct platform_device *pdev;
|
||||
struct device *dev;
|
||||
int bus_id = -1;
|
||||
const char *oh_name, *name;
|
||||
struct omap_musb_board_data *board_data;
|
||||
|
||||
if (musb_board_data)
|
||||
board_data = musb_board_data;
|
||||
else
|
||||
board_data = &musb_default_board_data;
|
||||
|
||||
/*
|
||||
* REVISIT: This line can be removed once all the platforms using
|
||||
* musb_core.c have been converted to use use clkdev.
|
||||
*/
|
||||
musb_plat.clock = "ick";
|
||||
musb_plat.board_data = board_data;
|
||||
musb_plat.power = board_data->power >> 1;
|
||||
musb_plat.mode = board_data->mode;
|
||||
musb_plat.extvbus = board_data->extvbus;
|
||||
|
||||
oh_name = "usb_otg_hs";
|
||||
name = "musb-omap2430";
|
||||
|
||||
oh = omap_hwmod_lookup(oh_name);
|
||||
if (WARN(!oh, "%s: could not find omap_hwmod for %s\n",
|
||||
__func__, oh_name))
|
||||
return;
|
||||
|
||||
pdev = omap_device_build(name, bus_id, oh, &musb_plat,
|
||||
sizeof(musb_plat));
|
||||
if (IS_ERR(pdev)) {
|
||||
pr_err("Could not build omap_device for %s %s\n",
|
||||
name, oh_name);
|
||||
return;
|
||||
}
|
||||
|
||||
dev = &pdev->dev;
|
||||
get_device(dev);
|
||||
dev->dma_mask = &musb_dmamask;
|
||||
dev->coherent_dma_mask = musb_dmamask;
|
||||
put_device(dev);
|
||||
}
|
@ -22,8 +22,6 @@
|
||||
|
||||
#include "gpmc.h"
|
||||
|
||||
#include "mux.h"
|
||||
|
||||
static u8 async_cs, sync_cs;
|
||||
static unsigned refclk_psec;
|
||||
|
||||
@ -226,25 +224,6 @@ tusb6010_setup_interface(struct musb_hdrc_platform_data *data,
|
||||
}
|
||||
tusb_device.dev.platform_data = data;
|
||||
|
||||
/* REVISIT let the driver know what DMA channels work */
|
||||
if (!dmachan)
|
||||
tusb_device.dev.dma_mask = NULL;
|
||||
else {
|
||||
/* assume OMAP 2420 ES2.0 and later */
|
||||
if (dmachan & (1 << 0))
|
||||
omap_mux_init_signal("sys_ndmareq0", 0);
|
||||
if (dmachan & (1 << 1))
|
||||
omap_mux_init_signal("sys_ndmareq1", 0);
|
||||
if (dmachan & (1 << 2))
|
||||
omap_mux_init_signal("sys_ndmareq2", 0);
|
||||
if (dmachan & (1 << 3))
|
||||
omap_mux_init_signal("sys_ndmareq3", 0);
|
||||
if (dmachan & (1 << 4))
|
||||
omap_mux_init_signal("sys_ndmareq4", 0);
|
||||
if (dmachan & (1 << 5))
|
||||
omap_mux_init_signal("sys_ndmareq5", 0);
|
||||
}
|
||||
|
||||
/* so far so good ... register the device */
|
||||
status = platform_device_register(&tusb_device);
|
||||
if (status < 0) {
|
||||
|
@ -63,32 +63,6 @@ config OMAP_RESET_CLOCKS
|
||||
probably do not want this option enabled until your
|
||||
device drivers work properly.
|
||||
|
||||
config OMAP_MUX
|
||||
bool "OMAP multiplexing support"
|
||||
depends on ARCH_OMAP
|
||||
default y
|
||||
help
|
||||
Pin multiplexing support for OMAP boards. If your bootloader
|
||||
sets the multiplexing correctly, say N. Otherwise, or if unsure,
|
||||
say Y.
|
||||
|
||||
config OMAP_MUX_DEBUG
|
||||
bool "Multiplexing debug output"
|
||||
depends on OMAP_MUX
|
||||
help
|
||||
Makes the multiplexing functions print out a lot of debug info.
|
||||
This is useful if you want to find out the correct values of the
|
||||
multiplexing registers.
|
||||
|
||||
config OMAP_MUX_WARNINGS
|
||||
bool "Warn about pins the bootloader didn't set up"
|
||||
depends on OMAP_MUX
|
||||
default y
|
||||
help
|
||||
Choose Y here to warn whenever driver initialization logic needs
|
||||
to change the pin multiplexing setup. When there are no warnings
|
||||
printed, it's safe to deselect OMAP_MUX for your product.
|
||||
|
||||
config OMAP_MPU_TIMER
|
||||
bool "Use mpu timer"
|
||||
depends on ARCH_OMAP1
|
||||
|
@ -11,6 +11,3 @@ obj-y := sram.o dma.o counter_32k.o
|
||||
|
||||
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
||||
i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
|
||||
obj-y += $(i2c-omap-m) $(i2c-omap-y)
|
||||
|
||||
|
@ -1,116 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/plat-omap/i2c.c
|
||||
*
|
||||
* Helper module for board specific I2C bus registration
|
||||
*
|
||||
* Copyright (C) 2007 Nokia Corporation.
|
||||
*
|
||||
* Contact: Jarkko Nikula <jhnikula@gmail.com>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c-omap.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <plat/i2c.h>
|
||||
|
||||
#define OMAP_I2C_MAX_CONTROLLERS 4
|
||||
static struct omap_i2c_bus_platform_data i2c_pdata[OMAP_I2C_MAX_CONTROLLERS];
|
||||
|
||||
#define OMAP_I2C_CMDLINE_SETUP (BIT(31))
|
||||
|
||||
/**
|
||||
* omap_i2c_bus_setup - Process command line options for the I2C bus speed
|
||||
* @str: String of options
|
||||
*
|
||||
* This function allow to override the default I2C bus speed for given I2C
|
||||
* bus with a command line option.
|
||||
*
|
||||
* Format: i2c_bus=bus_id,clkrate (in kHz)
|
||||
*
|
||||
* Returns 1 on success, 0 otherwise.
|
||||
*/
|
||||
static int __init omap_i2c_bus_setup(char *str)
|
||||
{
|
||||
int ints[3];
|
||||
|
||||
get_options(str, 3, ints);
|
||||
if (ints[0] < 2 || ints[1] < 1 ||
|
||||
ints[1] > OMAP_I2C_MAX_CONTROLLERS)
|
||||
return 0;
|
||||
i2c_pdata[ints[1] - 1].clkrate = ints[2];
|
||||
i2c_pdata[ints[1] - 1].clkrate |= OMAP_I2C_CMDLINE_SETUP;
|
||||
|
||||
return 1;
|
||||
}
|
||||
__setup("i2c_bus=", omap_i2c_bus_setup);
|
||||
|
||||
/*
|
||||
* Register busses defined in command line but that are not registered with
|
||||
* omap_register_i2c_bus from board initialization code.
|
||||
*/
|
||||
int __init omap_register_i2c_bus_cmdline(void)
|
||||
{
|
||||
int i, err = 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(i2c_pdata); i++)
|
||||
if (i2c_pdata[i].clkrate & OMAP_I2C_CMDLINE_SETUP) {
|
||||
i2c_pdata[i].clkrate &= ~OMAP_I2C_CMDLINE_SETUP;
|
||||
err = omap_i2c_add_bus(&i2c_pdata[i], i + 1);
|
||||
if (err)
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_register_i2c_bus - register I2C bus with device descriptors
|
||||
* @bus_id: bus id counting from number 1
|
||||
* @clkrate: clock rate of the bus in kHz
|
||||
* @info: pointer into I2C device descriptor table or NULL
|
||||
* @len: number of descriptors in the table
|
||||
*
|
||||
* Returns 0 on success or an error code.
|
||||
*/
|
||||
int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
|
||||
struct i2c_board_info const *info,
|
||||
unsigned len)
|
||||
{
|
||||
int err;
|
||||
|
||||
BUG_ON(bus_id < 1 || bus_id > OMAP_I2C_MAX_CONTROLLERS);
|
||||
|
||||
if (info) {
|
||||
err = i2c_register_board_info(bus_id, info, len);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!i2c_pdata[bus_id - 1].clkrate)
|
||||
i2c_pdata[bus_id - 1].clkrate = clkrate;
|
||||
|
||||
i2c_pdata[bus_id - 1].clkrate &= ~OMAP_I2C_CMDLINE_SETUP;
|
||||
|
||||
return omap_i2c_add_bus(&i2c_pdata[bus_id - 1], bus_id);
|
||||
}
|
Loading…
Reference in New Issue
Block a user