Commit e594a97c authored by Arnd Bergmann's avatar Arnd Bergmann

Merge branch 'v3.4/features' of git://gitorious.org/linux-davinci/linux-davinci into next/drivers

* 'v3.4/features' of git://gitorious.org/linux-davinci/linux-davinci:
  ARM: davinci: dm644x evm: add support for VPBE display
  ARM: davinci: dm644x: add support for v4l2 video display

* included from the davinci/cleanup branch:
  ARM: davinci: dm644x: don't force vpfe registeration on all boards
  ARM: davinci: dm644x: fix inconsistent variable naming
  ARM: davinci: dm644x: improve readability using macro
  ARM: davinci: streamline sysmod access
  ARM: davinci: create new common platform header for davinci
  ARM: davinci: dm646x: move private definitions to C file
  ARM: davinci: dm365: move private definitions to C file
  ARM: davinci: dm644x: move private definitions to C file

Conflicts:
	arch/arm/mach-davinci/board-dm644x-evm.c
	arch/arm/mach-davinci/board-neuros-osd2.c
	arch/arm/mach-davinci/board-sffsdr.c
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents f66f9bdf d5be5f54
...@@ -26,13 +26,14 @@ ...@@ -26,13 +26,14 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/dm355.h>
#include <mach/i2c.h> #include <mach/i2c.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/nand.h> #include <mach/nand.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/usb.h> #include <mach/usb.h>
#include "davinci.h"
/* NOTE: this is geared for the standard config, with a socketed /* NOTE: this is geared for the standard config, with a socketed
* 2 GByte Micron NAND (MT29F16G08FAA) using 128KB sectors. If you * 2 GByte Micron NAND (MT29F16G08FAA) using 128KB sectors. If you
* swap chips, maybe with a different block size, partitioning may * swap chips, maybe with a different block size, partitioning may
......
...@@ -23,13 +23,14 @@ ...@@ -23,13 +23,14 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/dm355.h>
#include <mach/i2c.h> #include <mach/i2c.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/nand.h> #include <mach/nand.h>
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/usb.h> #include <mach/usb.h>
#include "davinci.h"
/* NOTE: this is geared for the standard config, with a socketed /* NOTE: this is geared for the standard config, with a socketed
* 2 GByte Micron NAND (MT29F16G08FAA) using 128KB sectors. If you * 2 GByte Micron NAND (MT29F16G08FAA) using 128KB sectors. If you
* swap chips, maybe with a different block size, partitioning may * swap chips, maybe with a different block size, partitioning may
......
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/mux.h> #include <mach/mux.h>
#include <mach/dm365.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/i2c.h> #include <mach/i2c.h>
#include <mach/serial.h> #include <mach/serial.h>
...@@ -42,6 +41,8 @@ ...@@ -42,6 +41,8 @@
#include <media/tvp514x.h> #include <media/tvp514x.h>
#include "davinci.h"
static inline int have_imager(void) static inline int have_imager(void)
{ {
/* REVISIT when it's supported, trigger via Kconfig */ /* REVISIT when it's supported, trigger via Kconfig */
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/dm644x.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/i2c.h> #include <mach/i2c.h>
#include <mach/serial.h> #include <mach/serial.h>
...@@ -40,6 +39,8 @@ ...@@ -40,6 +39,8 @@
#include <mach/usb.h> #include <mach/usb.h>
#include <mach/aemif.h> #include <mach/aemif.h>
#include "davinci.h"
#define DM644X_EVM_PHY_ID "davinci_mdio-0:01" #define DM644X_EVM_PHY_ID "davinci_mdio-0:01"
#define LXT971_PHY_ID (0x001378e2) #define LXT971_PHY_ID (0x001378e2)
#define LXT971_PHY_MASK (0xfffffff0) #define LXT971_PHY_MASK (0xfffffff0)
...@@ -189,7 +190,7 @@ static struct platform_device davinci_fb_device = { ...@@ -189,7 +190,7 @@ static struct platform_device davinci_fb_device = {
.num_resources = 0, .num_resources = 0,
}; };
static struct tvp514x_platform_data tvp5146_pdata = { static struct tvp514x_platform_data dm644xevm_tvp5146_pdata = {
.clk_polarity = 0, .clk_polarity = 0,
.hs_polarity = 1, .hs_polarity = 1,
.vs_polarity = 1 .vs_polarity = 1
...@@ -197,7 +198,7 @@ static struct tvp514x_platform_data tvp5146_pdata = { ...@@ -197,7 +198,7 @@ static struct tvp514x_platform_data tvp5146_pdata = {
#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL) #define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
/* Inputs available at the TVP5146 */ /* Inputs available at the TVP5146 */
static struct v4l2_input tvp5146_inputs[] = { static struct v4l2_input dm644xevm_tvp5146_inputs[] = {
{ {
.index = 0, .index = 0,
.name = "Composite", .name = "Composite",
...@@ -217,7 +218,7 @@ static struct v4l2_input tvp5146_inputs[] = { ...@@ -217,7 +218,7 @@ static struct v4l2_input tvp5146_inputs[] = {
* ouput that goes to vpfe. There is a one to one correspondence * ouput that goes to vpfe. There is a one to one correspondence
* with tvp5146_inputs * with tvp5146_inputs
*/ */
static struct vpfe_route tvp5146_routes[] = { static struct vpfe_route dm644xevm_tvp5146_routes[] = {
{ {
.input = INPUT_CVBS_VI2B, .input = INPUT_CVBS_VI2B,
.output = OUTPUT_10BIT_422_EMBEDDED_SYNC, .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
...@@ -228,13 +229,13 @@ static struct vpfe_route tvp5146_routes[] = { ...@@ -228,13 +229,13 @@ static struct vpfe_route tvp5146_routes[] = {
}, },
}; };
static struct vpfe_subdev_info vpfe_sub_devs[] = { static struct vpfe_subdev_info dm644xevm_vpfe_sub_devs[] = {
{ {
.name = "tvp5146", .name = "tvp5146",
.grp_id = 0, .grp_id = 0,
.num_inputs = ARRAY_SIZE(tvp5146_inputs), .num_inputs = ARRAY_SIZE(dm644xevm_tvp5146_inputs),
.inputs = tvp5146_inputs, .inputs = dm644xevm_tvp5146_inputs,
.routes = tvp5146_routes, .routes = dm644xevm_tvp5146_routes,
.can_route = 1, .can_route = 1,
.ccdc_if_params = { .ccdc_if_params = {
.if_type = VPFE_BT656, .if_type = VPFE_BT656,
...@@ -243,15 +244,15 @@ static struct vpfe_subdev_info vpfe_sub_devs[] = { ...@@ -243,15 +244,15 @@ static struct vpfe_subdev_info vpfe_sub_devs[] = {
}, },
.board_info = { .board_info = {
I2C_BOARD_INFO("tvp5146", 0x5d), I2C_BOARD_INFO("tvp5146", 0x5d),
.platform_data = &tvp5146_pdata, .platform_data = &dm644xevm_tvp5146_pdata,
}, },
}, },
}; };
static struct vpfe_config vpfe_cfg = { static struct vpfe_config dm644xevm_capture_cfg = {
.num_subdevs = ARRAY_SIZE(vpfe_sub_devs), .num_subdevs = ARRAY_SIZE(dm644xevm_vpfe_sub_devs),
.i2c_adapter_id = 1, .i2c_adapter_id = 1,
.sub_devs = vpfe_sub_devs, .sub_devs = dm644xevm_vpfe_sub_devs,
.card_name = "DM6446 EVM", .card_name = "DM6446 EVM",
.ccdc = "DM6446 CCDC", .ccdc = "DM6446 CCDC",
}; };
...@@ -612,6 +613,113 @@ static void __init evm_init_i2c(void) ...@@ -612,6 +613,113 @@ static void __init evm_init_i2c(void)
i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info)); i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
} }
#define VENC_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
/* venc standard timings */
static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
{
.name = "ntsc",
.timings_type = VPBE_ENC_STD,
.timings = {V4L2_STD_525_60},
.interlaced = 1,
.xres = 720,
.yres = 480,
.aspect = {11, 10},
.fps = {30000, 1001},
.left_margin = 0x79,
.upper_margin = 0x10,
},
{
.name = "pal",
.timings_type = VPBE_ENC_STD,
.timings = {V4L2_STD_625_50},
.interlaced = 1,
.xres = 720,
.yres = 576,
.aspect = {54, 59},
.fps = {25, 1},
.left_margin = 0x7e,
.upper_margin = 0x16,
},
};
/* venc dv preset timings */
static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {
{
.name = "480p59_94",
.timings_type = VPBE_ENC_DV_PRESET,
.timings = {V4L2_DV_480P59_94},
.interlaced = 0,
.xres = 720,
.yres = 480,
.aspect = {1, 1},
.fps = {5994, 100},
.left_margin = 0x80,
.upper_margin = 0x20,
},
{
.name = "576p50",
.timings_type = VPBE_ENC_DV_PRESET,
.timings = {V4L2_DV_576P50},
.interlaced = 0,
.xres = 720,
.yres = 576,
.aspect = {1, 1},
.fps = {50, 1},
.left_margin = 0x7e,
.upper_margin = 0x30,
},
};
/*
* The outputs available from VPBE + encoders. Keep the order same
* as that of encoders. First those from venc followed by that from
* encoders. Index in the output refers to index on a particular encoder.
* Driver uses this index to pass it to encoder when it supports more
* than one output. Userspace applications use index of the array to
* set an output.
*/
static struct vpbe_output dm644xevm_vpbe_outputs[] = {
{
.output = {
.index = 0,
.name = "Composite",
.type = V4L2_OUTPUT_TYPE_ANALOG,
.std = VENC_STD_ALL,
.capabilities = V4L2_OUT_CAP_STD,
},
.subdev_name = VPBE_VENC_SUBDEV_NAME,
.default_mode = "ntsc",
.num_modes = ARRAY_SIZE(dm644xevm_enc_std_timing),
.modes = dm644xevm_enc_std_timing,
},
{
.output = {
.index = 1,
.name = "Component",
.type = V4L2_OUTPUT_TYPE_ANALOG,
.capabilities = V4L2_OUT_CAP_PRESETS,
},
.subdev_name = VPBE_VENC_SUBDEV_NAME,
.default_mode = "480p59_94",
.num_modes = ARRAY_SIZE(dm644xevm_enc_preset_timing),
.modes = dm644xevm_enc_preset_timing,
},
};
static struct vpbe_config dm644xevm_display_cfg = {
.module_name = "dm644x-vpbe-display",
.i2c_adapter_id = 1,
.osd = {
.module_name = VPBE_OSD_SUBDEV_NAME,
},
.venc = {
.module_name = VPBE_VENC_SUBDEV_NAME,
},
.num_outputs = ARRAY_SIZE(dm644xevm_vpbe_outputs),
.outputs = dm644xevm_vpbe_outputs,
};
static struct platform_device *davinci_evm_devices[] __initdata = { static struct platform_device *davinci_evm_devices[] __initdata = {
&davinci_fb_device, &davinci_fb_device,
&rtc_dev, &rtc_dev,
...@@ -624,8 +732,6 @@ static struct davinci_uart_config uart_config __initdata = { ...@@ -624,8 +732,6 @@ static struct davinci_uart_config uart_config __initdata = {
static void __init static void __init
davinci_evm_map_io(void) davinci_evm_map_io(void)
{ {
/* setup input configuration for VPFE input devices */
dm644x_set_vpfe_config(&vpfe_cfg);
dm644x_init(); dm644x_init();
} }
...@@ -697,6 +803,7 @@ static __init void davinci_evm_init(void) ...@@ -697,6 +803,7 @@ static __init void davinci_evm_init(void)
evm_init_i2c(); evm_init_i2c();
davinci_setup_mmc(0, &dm6446evm_mmc_config); davinci_setup_mmc(0, &dm6446evm_mmc_config);
dm644x_init_video(&dm644xevm_capture_cfg, &dm644xevm_display_cfg);
davinci_serial_init(&uart_config); davinci_serial_init(&uart_config);
dm644x_init_asp(&dm644x_evm_snd_data); dm644x_init_asp(&dm644x_evm_snd_data);
......
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/dm646x.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/i2c.h> #include <mach/i2c.h>
...@@ -45,6 +44,7 @@ ...@@ -45,6 +44,7 @@
#include <mach/cdce949.h> #include <mach/cdce949.h>
#include <mach/aemif.h> #include <mach/aemif.h>
#include "davinci.h"
#include "clock.h" #include "clock.h"
#define NAND_BLOCK_SIZE SZ_128K #define NAND_BLOCK_SIZE SZ_128K
...@@ -410,8 +410,6 @@ static struct davinci_i2c_platform_data i2c_pdata = { ...@@ -410,8 +410,6 @@ static struct davinci_i2c_platform_data i2c_pdata = {
.bus_delay = 0 /* usec */, .bus_delay = 0 /* usec */,
}; };
#define VIDCLKCTL_OFFSET (DAVINCI_SYSTEM_MODULE_BASE + 0x38)
#define VSCLKDIS_OFFSET (DAVINCI_SYSTEM_MODULE_BASE + 0x6c)
#define VCH2CLK_MASK (BIT_MASK(10) | BIT_MASK(9) | BIT_MASK(8)) #define VCH2CLK_MASK (BIT_MASK(10) | BIT_MASK(9) | BIT_MASK(8))
#define VCH2CLK_SYSCLK8 (BIT(9)) #define VCH2CLK_SYSCLK8 (BIT(9))
#define VCH2CLK_AUXCLK (BIT(9) | BIT(8)) #define VCH2CLK_AUXCLK (BIT(9) | BIT(8))
...@@ -429,8 +427,6 @@ static struct davinci_i2c_platform_data i2c_pdata = { ...@@ -429,8 +427,6 @@ static struct davinci_i2c_platform_data i2c_pdata = {
#define TVP5147_CH0 "tvp514x-0" #define TVP5147_CH0 "tvp514x-0"
#define TVP5147_CH1 "tvp514x-1" #define TVP5147_CH1 "tvp514x-1"
static void __iomem *vpif_vidclkctl_reg;
static void __iomem *vpif_vsclkdis_reg;
/* spin lock for updating above registers */ /* spin lock for updating above registers */
static spinlock_t vpif_reg_lock; static spinlock_t vpif_reg_lock;
...@@ -441,14 +437,14 @@ static int set_vpif_clock(int mux_mode, int hd) ...@@ -441,14 +437,14 @@ static int set_vpif_clock(int mux_mode, int hd)
int val = 0; int val = 0;
int err = 0; int err = 0;
if (!vpif_vidclkctl_reg || !vpif_vsclkdis_reg || !cpld_client) if (!cpld_client)
return -ENXIO; return -ENXIO;
/* disable the clock */ /* disable the clock */
spin_lock_irqsave(&vpif_reg_lock, flags); spin_lock_irqsave(&vpif_reg_lock, flags);
value = __raw_readl(vpif_vsclkdis_reg); value = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_VSCLKDIS));
value |= (VIDCH3CLK | VIDCH2CLK); value |= (VIDCH3CLK | VIDCH2CLK);
__raw_writel(value, vpif_vsclkdis_reg); __raw_writel(value, DAVINCI_SYSMOD_VIRT(SYSMOD_VSCLKDIS));
spin_unlock_irqrestore(&vpif_reg_lock, flags); spin_unlock_irqrestore(&vpif_reg_lock, flags);
val = i2c_smbus_read_byte(cpld_client); val = i2c_smbus_read_byte(cpld_client);
...@@ -464,7 +460,7 @@ static int set_vpif_clock(int mux_mode, int hd) ...@@ -464,7 +460,7 @@ static int set_vpif_clock(int mux_mode, int hd)
if (err) if (err)
return err; return err;
value = __raw_readl(vpif_vidclkctl_reg); value = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_VIDCLKCTL));
value &= ~(VCH2CLK_MASK); value &= ~(VCH2CLK_MASK);
value &= ~(VCH3CLK_MASK); value &= ~(VCH3CLK_MASK);
...@@ -473,13 +469,13 @@ static int set_vpif_clock(int mux_mode, int hd) ...@@ -473,13 +469,13 @@ static int set_vpif_clock(int mux_mode, int hd)
else else
value |= (VCH2CLK_AUXCLK | VCH3CLK_AUXCLK); value |= (VCH2CLK_AUXCLK | VCH3CLK_AUXCLK);
__raw_writel(value, vpif_vidclkctl_reg); __raw_writel(value, DAVINCI_SYSMOD_VIRT(SYSMOD_VIDCLKCTL));
spin_lock_irqsave(&vpif_reg_lock, flags); spin_lock_irqsave(&vpif_reg_lock, flags);
value = __raw_readl(vpif_vsclkdis_reg); value = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_VSCLKDIS));
/* enable the clock */ /* enable the clock */
value &= ~(VIDCH3CLK | VIDCH2CLK); value &= ~(VIDCH3CLK | VIDCH2CLK);
__raw_writel(value, vpif_vsclkdis_reg); __raw_writel(value, DAVINCI_SYSMOD_VIRT(SYSMOD_VSCLKDIS));
spin_unlock_irqrestore(&vpif_reg_lock, flags); spin_unlock_irqrestore(&vpif_reg_lock, flags);
return 0; return 0;
...@@ -564,7 +560,7 @@ static int setup_vpif_input_channel_mode(int mux_mode) ...@@ -564,7 +560,7 @@ static int setup_vpif_input_channel_mode(int mux_mode)
int val; int val;
u32 value; u32 value;
if (!vpif_vidclkctl_reg || !cpld_client) if (!cpld_client)
return -ENXIO; return -ENXIO;
val = i2c_smbus_read_byte(cpld_client); val = i2c_smbus_read_byte(cpld_client);
...@@ -572,7 +568,7 @@ static int setup_vpif_input_channel_mode(int mux_mode) ...@@ -572,7 +568,7 @@ static int setup_vpif_input_channel_mode(int mux_mode)
return val; return val;
spin_lock_irqsave(&vpif_reg_lock, flags); spin_lock_irqsave(&vpif_reg_lock, flags);
value = __raw_readl(vpif_vidclkctl_reg); value = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_VIDCLKCTL));
if (mux_mode) { if (mux_mode) {
val &= VPIF_INPUT_TWO_CHANNEL; val &= VPIF_INPUT_TWO_CHANNEL;
value |= VIDCH1CLK; value |= VIDCH1CLK;
...@@ -580,7 +576,7 @@ static int setup_vpif_input_channel_mode(int mux_mode) ...@@ -580,7 +576,7 @@ static int setup_vpif_input_channel_mode(int mux_mode)
val |= VPIF_INPUT_ONE_CHANNEL; val |= VPIF_INPUT_ONE_CHANNEL;
value &= ~VIDCH1CLK; value &= ~VIDCH1CLK;
} }
__raw_writel(value, vpif_vidclkctl_reg); __raw_writel(value, DAVINCI_SYSMOD_VIRT(SYSMOD_VIDCLKCTL));
spin_unlock_irqrestore(&vpif_reg_lock, flags); spin_unlock_irqrestore(&vpif_reg_lock, flags);
err = i2c_smbus_write_byte(cpld_client, val); err = i2c_smbus_write_byte(cpld_client, val);
...@@ -674,12 +670,6 @@ static struct vpif_capture_config dm646x_vpif_capture_cfg = { ...@@ -674,12 +670,6 @@ static struct vpif_capture_config dm646x_vpif_capture_cfg = {
static void __init evm_init_video(void) static void __init evm_init_video(void)
{ {
vpif_vidclkctl_reg = ioremap(VIDCLKCTL_OFFSET, 4);
vpif_vsclkdis_reg = ioremap(VSCLKDIS_OFFSET, 4);
if (!vpif_vidclkctl_reg || !vpif_vsclkdis_reg) {
pr_err("Can't map VPIF VIDCLKCTL or VSCLKDIS registers\n");
return;
}
spin_lock_init(&vpif_reg_lock); spin_lock_init(&vpif_reg_lock);
dm646x_setup_vpif(&dm646x_vpif_display_config, dm646x_setup_vpif(&dm646x_vpif_display_config,
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <mach/dm644x.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/i2c.h> #include <mach/i2c.h>
#include <mach/serial.h> #include <mach/serial.h>
...@@ -39,6 +38,8 @@ ...@@ -39,6 +38,8 @@
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/usb.h> #include <mach/usb.h>
#include "davinci.h"
#define NEUROS_OSD2_PHY_ID "davinci_mdio-0:01" #define NEUROS_OSD2_PHY_ID "davinci_mdio-0:01"
#define LXT971_PHY_ID 0x001378e2 #define LXT971_PHY_ID 0x001378e2
#define LXT971_PHY_MASK 0xfffffff0 #define LXT971_PHY_MASK 0xfffffff0
......
...@@ -35,13 +35,14 @@ ...@@ -35,13 +35,14 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/flash.h> #include <asm/mach/flash.h>
#include <mach/dm644x.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/i2c.h> #include <mach/i2c.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/mux.h> #include <mach/mux.h>
#include <mach/usb.h> #include <mach/usb.h>
#include "davinci.h"
#define SFFSDR_PHY_ID "davinci_mdio-0:01" #define SFFSDR_PHY_ID "davinci_mdio-0:01"
static struct mtd_partition davinci_sffsdr_nandflash_partition[] = { static struct mtd_partition davinci_sffsdr_nandflash_partition[] = {
/* U-Boot Environment: Block 0 /* U-Boot Environment: Block 0
......
/* /*
* Copyright (C) 2009 Texas Instruments Incorporated * This file contains the processor specific definitions
* of the TI DM644x, DM355, DM365, and DM646x.
*
* Copyright (C) 2011 Texas Instruments Incorporated
* Copyright (c) 2007 Deep Root Systems, LLC
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
...@@ -10,36 +14,69 @@ ...@@ -10,36 +14,69 @@
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#ifndef __ASM_ARCH_DM365_H #ifndef __DAVINCI_H
#define __ASM_ARCH_DM665_H #define __DAVINCI_H
#include <linux/platform_device.h> #include <linux/clk.h>
#include <linux/videodev2.h>
#include <linux/davinci_emac.h> #include <linux/davinci_emac.h>
#include <mach/hardware.h> #include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <mach/asp.h> #include <mach/asp.h>
#include <mach/keyscan.h> #include <mach/keyscan.h>
#include <mach/hardware.h>
#include <media/davinci/vpfe_capture.h> #include <media/davinci/vpfe_capture.h>
#include <media/davinci/vpif_types.h>
#include <media/davinci/vpss.h>
#include <media/davinci/vpbe_types.h>
#include <media/davinci/vpbe_venc.h>
#include <media/davinci/vpbe.h>
#include <media/davinci/vpbe_osd.h>
#define DM365_EMAC_BASE (0x01D07000) #define DAVINCI_SYSTEM_MODULE_BASE 0x01c40000
#define DM365_EMAC_MDIO_BASE (DM365_EMAC_BASE + 0x4000) #define SYSMOD_VIDCLKCTL 0x38
#define DM365_EMAC_CNTRL_OFFSET (0x0000) #define SYSMOD_VPSS_CLKCTL 0x44
#define DM365_EMAC_CNTRL_MOD_OFFSET (0x3000) #define SYSMOD_VDD3P3VPWDN 0x48
#define DM365_EMAC_CNTRL_RAM_OFFSET (0x1000) #define SYSMOD_VSCLKDIS 0x6c
#define DM365_EMAC_CNTRL_RAM_SIZE (0x2000) #define SYSMOD_PUPDCTL1 0x7c
/* Base of key scan register bank */ extern void __iomem *davinci_sysmod_base;
#define DM365_KEYSCAN_BASE (0x01C69400) #define DAVINCI_SYSMOD_VIRT(x) (davinci_sysmod_base + (x))
void davinci_map_sysmod(void);
#define DM365_RTC_BASE (0x01C69000) /* DM355 base addresses */
#define DM355_ASYNC_EMIF_CONTROL_BASE 0x01e10000
#define DM355_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
#define DAVINCI_DM365_VC_BASE (0x01D0C000) #define ASP1_TX_EVT_EN 1
#define DAVINCI_DMA_VC_TX 2 #define ASP1_RX_EVT_EN 2
#define DAVINCI_DMA_VC_RX 3
#define DM365_ASYNC_EMIF_CONTROL_BASE 0x01D10000 /* DM365 base addresses */
#define DM365_ASYNC_EMIF_CONTROL_BASE 0x01d10000
#define DM365_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 #define DM365_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
#define DM365_ASYNC_EMIF_DATA_CE1_BASE 0x04000000 #define DM365_ASYNC_EMIF_DATA_CE1_BASE 0x04000000
/* DM644x base addresses */
#define DM644X_ASYNC_EMIF_CONTROL_BASE 0x01e00000
#define DM644X_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
#define DM644X_ASYNC_EMIF_DATA_CE1_BASE 0x04000000
#define DM644X_ASYNC_EMIF_DATA_CE2_BASE 0x06000000
#define DM644X_ASYNC_EMIF_DATA_CE3_BASE 0x08000000
/* DM646x base addresses */
#define DM646X_ASYNC_EMIF_CONTROL_BASE 0x20008000
#define DM646X_ASYNC_EMIF_CS2_SPACE_BASE 0x42000000
/* DM355 function declarations */
void __init dm355_init(void);
void dm355_init_spi0(unsigned chipselect_mask,
struct spi_board_info *info, unsigned len);
void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata);
void dm355_set_vpfe_config(struct vpfe_config *cfg);
/* DM365 function declarations */
void __init dm365_init(void); void __init dm365_init(void);
void __init dm365_init_asp(struct snd_platform_data *pdata); void __init dm365_init_asp(struct snd_platform_data *pdata);
void __init dm365_init_vc(struct snd_platform_data *pdata); void __init dm365_init_vc(struct snd_platform_data *pdata);
...@@ -47,6 +84,19 @@ void __init dm365_init_ks(struct davinci_ks_platform_data *pdata); ...@@ -47,6 +84,19 @@ void __init dm365_init_ks(struct davinci_ks_platform_data *pdata);
void __init dm365_init_rtc(void); void __init dm365_init_rtc(void);
void dm365_init_spi0(unsigned chipselect_mask, void dm365_init_spi0(unsigned chipselect_mask,
struct spi_board_info *info, unsigned len); struct spi_board_info *info, unsigned len);
void dm365_set_vpfe_config(struct vpfe_config *cfg); void dm365_set_vpfe_config(struct vpfe_config *cfg);
#endif /* __ASM_ARCH_DM365_H */
/* DM644x function declarations */
void __init dm644x_init(void);
void __init dm644x_init_asp(struct snd_platform_data *pdata);
int __init dm644x_init_video(struct vpfe_config *, struct vpbe_config *);
/* DM646x function declarations */
void __init dm646x_init(void);
void __init dm646x_init_mcasp0(struct snd_platform_data *pdata);
void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
int __init dm646x_init_edma(struct edma_rsv_info *rsv);
void dm646x_video_init(void);
void dm646x_setup_vpif(struct vpif_display_config *,
struct vpif_capture_config *);
#endif /*__DAVINCI_H */
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <mach/mmc.h> #include <mach/mmc.h>
#include <mach/time.h> #include <mach/time.h>
#include "davinci.h"
#include "clock.h" #include "clock.h"
#define DAVINCI_I2C_BASE 0x01C21000 #define DAVINCI_I2C_BASE 0x01C21000
...@@ -33,8 +34,19 @@ ...@@ -33,8 +34,19 @@
#define DM365_MMCSD0_BASE 0x01D11000 #define DM365_MMCSD0_BASE 0x01D11000
#define DM365_MMCSD1_BASE 0x01D00000 #define DM365_MMCSD1_BASE 0x01D00000
/* System control register offsets */ void __iomem *davinci_sysmod_base;
#define DM64XX_VDD3P3V_PWDN 0x48
void davinci_map_sysmod(void)
{
davinci_sysmod_base = ioremap_nocache(DAVINCI_SYSTEM_MODULE_BASE,
0x800);
/*
* Throw a bug since a lot of board initialization code depends
* on system module availability. ioremap() failing this early
* need careful looking into anyway.
*/
BUG_ON(!davinci_sysmod_base);
}
static struct resource i2c_resources[] = { static struct resource i2c_resources[] = {
{ {
...@@ -212,12 +224,12 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config) ...@@ -212,12 +224,12 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
davinci_cfg_reg(DM355_SD1_DATA2); davinci_cfg_reg(DM355_SD1_DATA2);
davinci_cfg_reg(DM355_SD1_DATA3); davinci_cfg_reg(DM355_SD1_DATA3);
} else if (cpu_is_davinci_dm365()) { } else if (cpu_is_davinci_dm365()) {
void __iomem *pupdctl1 =
IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE + 0x7c);
/* Configure pull down control */ /* Configure pull down control */
__raw_writel((__raw_readl(pupdctl1) & ~0xfc0), unsigned v;
pupdctl1);
v = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_PUPDCTL1));
__raw_writel(v & ~0xfc0,
DAVINCI_SYSMOD_VIRT(SYSMOD_PUPDCTL1));
mmcsd1_resources[0].start = DM365_MMCSD1_BASE; mmcsd1_resources[0].start = DM365_MMCSD1_BASE;
mmcsd1_resources[0].end = DM365_MMCSD1_BASE + mmcsd1_resources[0].end = DM365_MMCSD1_BASE +
...@@ -246,11 +258,9 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config) ...@@ -246,11 +258,9 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
mmcsd0_resources[2].start = IRQ_DM365_SDIOINT0; mmcsd0_resources[2].start = IRQ_DM365_SDIOINT0;
} else if (cpu_is_davinci_dm644x()) { } else if (cpu_is_davinci_dm644x()) {
/* REVISIT: should this be in board-init code? */ /* REVISIT: should this be in board-init code? */
void __iomem *base =
IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE);
/* Power-on 3.3V IO cells */ /* Power-on 3.3V IO cells */
__raw_writel(0, base + DM64XX_VDD3P3V_PWDN); __raw_writel(0,
DAVINCI_SYSMOD_VIRT(SYSMOD_VDD3P3VPWDN));
/*Set up the pull regiter for MMC */ /*Set up the pull regiter for MMC */
davinci_cfg_reg(DM644X_MSTK); davinci_cfg_reg(DM644X_MSTK);
} }
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/dm355.h>
#include <mach/cputype.h> #include <mach/cputype.h>
#include <mach/edma.h> #include <mach/edma.h>
#include <mach/psc.h> #include <mach/psc.h>
...@@ -31,6 +30,7 @@ ...@@ -31,6 +30,7 @@
#include <mach/spi.h> #include <mach/spi.h>
#include <mach/gpio-davinci.h> #include <mach/gpio-davinci.h>
#include "davinci.h"
#include "clock.h" #include "clock.h"
#include "mux.h" #include "mux.h"
...@@ -871,6 +871,7 @@ void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata) ...@@ -871,6 +871,7 @@ void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata)
void __init dm355_init(void) void __init dm355_init(void)
{ {
davinci_common_init(&davinci_soc_info_dm355); davinci_common_init(&davinci_soc_info_dm355);
davinci_map_sysmod();
} }
static int __init dm355_init_devices(void) static int __init dm355_init_devices(void)
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/dm365.h>
#include <mach/cputype.h> #include <mach/cputype.h>
#include <mach/edma.h> #include <mach/edma.h>
#include <mach/psc.h> #include <mach/psc.h>
...@@ -35,11 +34,28 @@ ...@@ -35,11 +34,28 @@
#include <mach/spi.h> #include <mach/spi.h>
#include <mach/gpio-davinci.h> #include <mach/gpio-davinci.h>
#include "davinci.h"
#include "clock.h" #include "clock.h"
#include "mux.h" #include "mux.h"
#define DM365_REF_FREQ 24000000 /* 24 MHz on the DM365 EVM */ #define DM365_REF_FREQ 24000000 /* 24 MHz on the DM365 EVM */
/* Base of key scan register bank */
#define DM365_KEYSCAN_BASE 0x01c69400
#define DM365_RTC_BASE 0x01c69000
#define DAVINCI_DM365_VC_BASE 0x01d0c000
#define DAVINCI_DMA_VC_TX 2
#define DAVINCI_DMA_VC_RX 3
#define DM365_EMAC_BASE 0x01d07000
#define DM365_EMAC_MDIO_BASE (DM365_EMAC_BASE + 0x4000)
#define DM365_EMAC_CNTRL_OFFSET 0x0000
#define DM365_EMAC_CNTRL_MOD_OFFSET 0x3000
#define DM365_EMAC_CNTRL_RAM_OFFSET 0x1000
#define DM365_EMAC_CNTRL_RAM_SIZE 0x2000
static struct pll_data pll1_data = { static struct pll_data pll1_data = {
.num = 1, .num = 1,
.phys_base = DAVINCI_PLL1_BASE, .phys_base = DAVINCI_PLL1_BASE,
...@@ -1122,6 +1138,7 @@ void __init dm365_init_rtc(void) ...@@ -1122,6 +1138,7 @@ void __init dm365_init_rtc(void)
void __init dm365_init(void) void __init dm365_init(void)
{ {
davinci_common_init(&davinci_soc_info_dm365); davinci_common_init(&davinci_soc_info_dm365);
davinci_map_sysmod();
} }
static struct resource dm365_vpss_resources[] = { static struct resource dm365_vpss_resources[] = {
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/dm644x.h>
#include <mach/cputype.h> #include <mach/cputype.h>
#include <mach/edma.h> #include <mach/edma.h>
#include <mach/irqs.h> #include <mach/irqs.h>
...@@ -27,6 +26,7 @@ ...@@ -27,6 +26,7 @@
#include <mach/asp.h> #include <mach/asp.h>
#include <mach/gpio-davinci.h> #include <mach/gpio-davinci.h>
#include "davinci.h"
#include "clock.h" #include "clock.h"
#include "mux.h" #include "mux.h"
...@@ -35,6 +35,13 @@ ...@@ -35,6 +35,13 @@
*/ */
#define DM644X_REF_FREQ 27000000 #define DM644X_REF_FREQ 27000000
#define DM644X_EMAC_BASE 0x01c80000
#define DM644X_EMAC_MDIO_BASE (DM644X_EMAC_BASE + 0x4000)
#define DM644X_EMAC_CNTRL_OFFSET 0x0000
#define DM644X_EMAC_CNTRL_MOD_OFFSET 0x1000
#define DM644X_EMAC_CNTRL_RAM_OFFSET 0x2000
#define DM644X_EMAC_CNTRL_RAM_SIZE 0x2000
static struct pll_data pll1_data = { static struct pll_data pll1_data = {
.num = 1, .num = 1,
.phys_base = DAVINCI_PLL1_BASE, .phys_base = DAVINCI_PLL1_BASE,
...@@ -587,13 +594,15 @@ static struct platform_device dm644x_asp_device = { ...@@ -587,13 +594,15 @@ static struct platform_device dm644x_asp_device = {
.resource = dm644x_asp_resources, .resource = dm644x_asp_resources,
}; };
#define DM644X_VPSS_BASE 0x01c73400
static struct resource dm644x_vpss_resources[] = { static struct resource dm644x_vpss_resources[] = {
{ {
/* VPSS Base address */ /* VPSS Base address */
.name = "vpss", .name = "vpss",
.start = 0x01c73400, .start = DM644X_VPSS_BASE,
.end = 0x01c73400 + 0xff, .end = DM644X_VPSS_BASE + 0xff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
}; };
...@@ -605,7 +614,7 @@ static struct platform_device dm644x_vpss_device = { ...@@ -605,7 +614,7 @@ static struct platform_device dm644x_vpss_device = {
.resource = dm644x_vpss_resources, .resource = dm644x_vpss_resources,
}; };
static struct resource vpfe_resources[] = { static struct resource dm644x_vpfe_resources[] = {
{ {
.start = IRQ_VDINT0, .start = IRQ_VDINT0,
.end = IRQ_VDINT0, .end = IRQ_VDINT0,
...@@ -618,7 +627,7 @@ static struct resource vpfe_resources[] = { ...@@ -618,7 +627,7 @@ static struct resource vpfe_resources[] = {
}, },
}; };
static u64 vpfe_capture_dma_mask = DMA_BIT_MASK(32); static u64 dm644x_video_dma_mask = DMA_BIT_MASK(32);
static struct resource dm644x_ccdc_resource[] = { static struct resource dm644x_ccdc_resource[] = {
/* CCDC Base address */ /* CCDC Base address */
{ {
...@@ -634,27 +643,149 @@ static struct platform_device dm644x_ccdc_dev = { ...@@ -634,27 +643,149 @@ static struct platform_device dm644x_ccdc_dev = {
.num_resources = ARRAY_SIZE(dm644x_ccdc_resource), .num_resources = ARRAY_SIZE(dm644x_ccdc_resource),
.resource = dm644x_ccdc_resource, .resource = dm644x_ccdc_resource,
.dev = { .dev = {
.dma_mask = &vpfe_capture_dma_mask, .dma_mask = &dm644x_video_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32), .coherent_dma_mask = DMA_BIT_MASK(32),
}, },
}; };
static struct platform_device vpfe_capture_dev = { static struct platform_device dm644x_vpfe_dev = {
.name = CAPTURE_DRV_NAME, .name = CAPTURE_DRV_NAME,
.id = -1, .id = -1,
.num_resources = ARRAY_SIZE(vpfe_resources), .num_resources = ARRAY_SIZE(dm644x_vpfe_resources),
.resource = vpfe_resources, .resource = dm644x_vpfe_resources,
.dev = { .dev = {
.dma_mask = &vpfe_capture_dma_mask, .dma_mask = &dm644x_video_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32),
},
};
#define DM644X_OSD_BASE 0x01c72600
static struct resource dm644x_osd_resources[] = {
{
.start = DM644X_OSD_BASE,
.end = DM644X_OSD_BASE + 0x1ff,
.flags = IORESOURCE_MEM,
},
};
static struct osd_platform_data dm644x_osd_data = {
.vpbe_type = VPBE_VERSION_1,
};
static struct platform_device dm644x_osd_dev = {
.name = VPBE_OSD_SUBDEV_NAME,
.id = -1,
.num_resources = ARRAY_SIZE(dm644x_osd_resources),
.resource = dm644x_osd_resources,
.dev = {
.dma_mask = &dm644x_video_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32), .coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &dm644x_osd_data,
}, },
}; };
void dm644x_set_vpfe_config(struct vpfe_config *cfg) #define DM644X_VENC_BASE 0x01c72400
static struct resource dm644x_venc_resources[] = {
{
.start = DM644X_VENC_BASE,
.end = DM644X_VENC_BASE + 0x17f,
.flags = IORESOURCE_MEM,
},
};
#define DM644X_VPSS_MUXSEL_PLL2_MODE BIT(0)
#define DM644X_VPSS_MUXSEL_VPBECLK_MODE BIT(1)
#define DM644X_VPSS_VENCLKEN BIT(3)
#define DM644X_VPSS_DACCLKEN BIT(4)
static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,
unsigned int mode)
{ {
vpfe_capture_dev.dev.platform_data = cfg; int ret = 0;
u32 v = DM644X_VPSS_VENCLKEN;
switch (type) {
case VPBE_ENC_STD:
v |= DM644X_VPSS_DACCLKEN;
writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
break;
case VPBE_ENC_DV_PRESET:
switch (mode) {
case V4L2_DV_480P59_94:
case V4L2_DV_576P50:
v |= DM644X_VPSS_MUXSEL_PLL2_MODE |
DM644X_VPSS_DACCLKEN;
writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
break;
case V4L2_DV_720P60:
case V4L2_DV_1080I60:
case V4L2_DV_1080P30:
/*
* For HD, use external clock source since
* HD requires higher clock rate
*/
v |= DM644X_VPSS_MUXSEL_VPBECLK_MODE;
writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
break;
default:
ret = -EINVAL;
break;
}
break;
default:
ret = -EINVAL;
}
return ret;
} }
static struct resource dm644x_v4l2_disp_resources[] = {
{
.start = IRQ_VENCINT,
.end = IRQ_VENCINT,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device dm644x_vpbe_display = {
.name = "vpbe-v4l2",
.id = -1,
.num_resources = ARRAY_SIZE(dm644x_v4l2_disp_resources),
.resource = dm644x_v4l2_disp_resources,
.dev = {
.dma_mask = &dm644x_video_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32),
},
};
static struct venc_platform_data dm644x_venc_pdata = {
.venc_type = VPBE_VERSION_1,
.setup_clock = dm644x_venc_setup_clock,
};
static struct platform_device dm644x_venc_dev = {
.name = VPBE_VENC_SUBDEV_NAME,
.id = -1,
.num_resources = ARRAY_SIZE(dm644x_venc_resources),
.resource = dm644x_venc_resources,
.dev = {
.dma_mask = &dm644x_video_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &dm644x_venc_pdata,
},
};
static struct platform_device dm644x_vpbe_dev = {
.name = "vpbe_controller",
.id = -1,
.dev = {
.dma_mask = &dm644x_video_dma_mask,
.coherent_dma_mask = DMA_BIT_MASK(32),
},
};
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
static struct map_desc dm644x_io_desc[] = { static struct map_desc dm644x_io_desc[] = {
...@@ -779,6 +910,35 @@ void __init dm644x_init_asp(struct snd_platform_data *pdata) ...@@ -779,6 +910,35 @@ void __init dm644x_init_asp(struct snd_platform_data *pdata)
void __init dm644x_init(void) void __init dm644x_init(void)
{ {
davinci_common_init(&davinci_soc_info_dm644x); davinci_common_init(&davinci_soc_info_dm644x);
davinci_map_sysmod();
}
int __init dm644x_init_video(struct vpfe_config *vpfe_cfg,
struct vpbe_config *vpbe_cfg)
{
if (vpfe_cfg || vpbe_cfg)
platform_device_register(&dm644x_vpss_device);
if (vpfe_cfg) {
dm644x_vpfe_dev.dev.platform_data = vpfe_cfg;
platform_device_register(&dm644x_ccdc_dev);
platform_device_register(&dm644x_vpfe_dev);
/* Add ccdc clock aliases */
clk_add_alias("master", dm644x_ccdc_dev.name,
"vpss_master", NULL);
clk_add_alias("slave", dm644x_ccdc_dev.name,
"vpss_slave", NULL);
}
if (vpbe_cfg) {
dm644x_vpbe_dev.dev.platform_data = vpbe_cfg;
platform_device_register(&dm644x_osd_dev);
platform_device_register(&dm644x_venc_dev);
platform_device_register(&dm644x_vpbe_dev);
platform_device_register(&dm644x_vpbe_display);
}
return 0;
} }
static int __init dm644x_init_devices(void) static int __init dm644x_init_devices(void)
...@@ -786,9 +946,6 @@ static int __init dm644x_init_devices(void) ...@@ -786,9 +946,6 @@ static int __init dm644x_init_devices(void)
if (!cpu_is_davinci_dm644x()) if (!cpu_is_davinci_dm644x())
return 0; return 0;
/* Add ccdc clock aliases */
clk_add_alias("master", dm644x_ccdc_dev.name, "vpss_master", NULL);
clk_add_alias("slave", dm644x_ccdc_dev.name, "vpss_slave", NULL);
platform_device_register(&dm644x_edma_device); platform_device_register(&dm644x_edma_device);
platform_device_register(&dm644x_mdio_device); platform_device_register(&dm644x_mdio_device);
...@@ -796,10 +953,6 @@ static int __init dm644x_init_devices(void) ...@@ -796,10 +953,6 @@ static int __init dm644x_init_devices(void)
clk_add_alias(NULL, dev_name(&dm644x_mdio_device.dev), clk_add_alias(NULL, dev_name(&dm644x_mdio_device.dev),
NULL, &dm644x_emac_device.dev); NULL, &dm644x_emac_device.dev);
platform_device_register(&dm644x_vpss_device);
platform_device_register(&dm644x_ccdc_dev);
platform_device_register(&vpfe_capture_dev);
return 0; return 0;
} }
postcore_initcall(dm644x_init_devices); postcore_initcall(dm644x_init_devices);
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/dm646x.h>
#include <mach/cputype.h> #include <mach/cputype.h>
#include <mach/edma.h> #include <mach/edma.h>
#include <mach/irqs.h> #include <mach/irqs.h>
...@@ -28,12 +27,11 @@ ...@@ -28,12 +27,11 @@
#include <mach/asp.h> #include <mach/asp.h>
#include <mach/gpio-davinci.h> #include <mach/gpio-davinci.h>
#include "davinci.h"
#include "clock.h" #include "clock.h"
#include "mux.h" #include "mux.h"
#define DAVINCI_VPIF_BASE (0x01C12000) #define DAVINCI_VPIF_BASE (0x01C12000)
#define VDD3P3V_PWDN_OFFSET (0x48)
#define VSCLKDIS_OFFSET (0x6C)
#define VDD3P3V_VID_MASK (BIT_MASK(3) | BIT_MASK(2) | BIT_MASK(1) |\ #define VDD3P3V_VID_MASK (BIT_MASK(3) | BIT_MASK(2) | BIT_MASK(1) |\
BIT_MASK(0)) BIT_MASK(0))
...@@ -46,6 +44,13 @@ ...@@ -46,6 +44,13 @@
#define DM646X_REF_FREQ 27000000 #define DM646X_REF_FREQ 27000000
#define DM646X_AUX_FREQ 24000000 #define DM646X_AUX_FREQ 24000000
#define DM646X_EMAC_BASE 0x01c80000
#define DM646X_EMAC_MDIO_BASE (DM646X_EMAC_BASE + 0x4000)
#define DM646X_EMAC_CNTRL_OFFSET 0x0000
#define DM646X_EMAC_CNTRL_MOD_OFFSET 0x1000
#define DM646X_EMAC_CNTRL_RAM_OFFSET 0x2000
#define DM646X_EMAC_CNTRL_RAM_SIZE 0x2000
static struct pll_data pll1_data = { static struct pll_data pll1_data = {
.num = 1, .num = 1,
.phys_base = DAVINCI_PLL1_BASE, .phys_base = DAVINCI_PLL1_BASE,
...@@ -873,15 +878,14 @@ void dm646x_setup_vpif(struct vpif_display_config *display_config, ...@@ -873,15 +878,14 @@ void dm646x_setup_vpif(struct vpif_display_config *display_config,
struct vpif_capture_config *capture_config) struct vpif_capture_config *capture_config)
{ {
unsigned int value; unsigned int value;
void __iomem *base = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE);
value = __raw_readl(base + VSCLKDIS_OFFSET); value = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_VSCLKDIS));
value &= ~VSCLKDIS_MASK; value &= ~VSCLKDIS_MASK;
__raw_writel(value, base + VSCLKDIS_OFFSET); __raw_writel(value, DAVINCI_SYSMOD_VIRT(SYSMOD_VSCLKDIS));
value = __raw_readl(base + VDD3P3V_PWDN_OFFSET); value = __raw_readl(DAVINCI_SYSMOD_VIRT(SYSMOD_VDD3P3VPWDN));
value &= ~VDD3P3V_VID_MASK; value &= ~VDD3P3V_VID_MASK;
__raw_writel(value, base + VDD3P3V_PWDN_OFFSET); __raw_writel(value, DAVINCI_SYSMOD_VIRT(SYSMOD_VDD3P3VPWDN));
davinci_cfg_reg(DM646X_STSOMUX_DISABLE); davinci_cfg_reg(DM646X_STSOMUX_DISABLE);
davinci_cfg_reg(DM646X_STSIMUX_DISABLE); davinci_cfg_reg(DM646X_STSIMUX_DISABLE);
...@@ -905,6 +909,7 @@ int __init dm646x_init_edma(struct edma_rsv_info *rsv) ...@@ -905,6 +909,7 @@ int __init dm646x_init_edma(struct edma_rsv_info *rsv)
void __init dm646x_init(void) void __init dm646x_init(void)
{ {
davinci_common_init(&davinci_soc_info_dm646x); davinci_common_init(&davinci_soc_info_dm646x);
davinci_map_sysmod();
} }
static int __init dm646x_init_devices(void) static int __init dm646x_init_devices(void)
......
/*
* Chip specific defines for DM355 SoC
*
* Author: Kevin Hilman, Deep Root Systems, LLC
*
* 2007 (c) Deep Root Systems, LLC. This file is licensed under
* the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express
* or implied.
*/
#ifndef __ASM_ARCH_DM355_H
#define __ASM_ARCH_DM355_H
#include <mach/hardware.h>
#include <mach/asp.h>
#include <media/davinci/vpfe_capture.h>
#define DM355_ASYNC_EMIF_CONTROL_BASE 0x01E10000
#define DM355_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
#define ASP1_TX_EVT_EN 1
#define ASP1_RX_EVT_EN 2
struct spi_board_info;
void __init dm355_init(void);
void dm355_init_spi0(unsigned chipselect_mask,
struct spi_board_info *info, unsigned len);
void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata);
void dm355_set_vpfe_config(struct vpfe_config *cfg);
#endif /* __ASM_ARCH_DM355_H */
/*
* This file contains the processor specific definitions
* of the TI DM644x.
*
* Copyright (C) 2008 Texas Instruments.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef __ASM_ARCH_DM644X_H
#define __ASM_ARCH_DM644X_H
#include <linux/davinci_emac.h>
#include <mach/hardware.h>
#include <mach/asp.h>
#include <media/davinci/vpfe_capture.h>
#define DM644X_EMAC_BASE (0x01C80000)
#define DM644X_EMAC_MDIO_BASE (DM644X_EMAC_BASE + 0x4000)
#define DM644X_EMAC_CNTRL_OFFSET (0x0000)
#define DM644X_EMAC_CNTRL_MOD_OFFSET (0x1000)
#define DM644X_EMAC_CNTRL_RAM_OFFSET (0x2000)
#define DM644X_EMAC_CNTRL_RAM_SIZE (0x2000)
#define DM644X_ASYNC_EMIF_CONTROL_BASE 0x01E00000
#define DM644X_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
#define DM644X_ASYNC_EMIF_DATA_CE1_BASE 0x04000000
#define DM644X_ASYNC_EMIF_DATA_CE2_BASE 0x06000000
#define DM644X_ASYNC_EMIF_DATA_CE3_BASE 0x08000000
void __init dm644x_init(void);
void __init dm644x_init_asp(struct snd_platform_data *pdata);
void dm644x_set_vpfe_config(struct vpfe_config *cfg);
#endif /* __ASM_ARCH_DM644X_H */
/*
* Chip specific defines for DM646x SoC
*
* Author: Kevin Hilman, Deep Root Systems, LLC
*
* 2007 (c) Deep Root Systems, LLC. This file is licensed under
* the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express
* or implied.
*/
#ifndef __ASM_ARCH_DM646X_H
#define __ASM_ARCH_DM646X_H
#include <mach/hardware.h>
#include <mach/asp.h>
#include <linux/i2c.h>
#include <linux/videodev2.h>
#include <linux/davinci_emac.h>
#include <media/davinci/vpif_types.h>
#define DM646X_EMAC_BASE (0x01C80000)
#define DM646X_EMAC_MDIO_BASE (DM646X_EMAC_BASE + 0x4000)
#define DM646X_EMAC_CNTRL_OFFSET (0x0000)
#define DM646X_EMAC_CNTRL_MOD_OFFSET (0x1000)
#define DM646X_EMAC_CNTRL_RAM_OFFSET (0x2000)
#define DM646X_EMAC_CNTRL_RAM_SIZE (0x2000)
#define DM646X_ASYNC_EMIF_CONTROL_BASE 0x20008000
#define DM646X_ASYNC_EMIF_CS2_SPACE_BASE 0x42000000
void __init dm646x_init(void);
void __init dm646x_init_mcasp0(struct snd_platform_data *pdata);
void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
int __init dm646x_init_edma(struct edma_rsv_info *rsv);
void dm646x_video_init(void);
void dm646x_setup_vpif(struct vpif_display_config *,
struct vpif_capture_config *);
#endif /* __ASM_ARCH_DM646X_H */
...@@ -19,8 +19,6 @@ ...@@ -19,8 +19,6 @@
* and the chip/board init code should then explicitly include * and the chip/board init code should then explicitly include
* <chipname>.h * <chipname>.h
*/ */
#define DAVINCI_SYSTEM_MODULE_BASE 0x01C40000
/* /*
* I/O mapping * I/O mapping
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment