Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
2e2c32e2
Commit
2e2c32e2
authored
Sep 08, 2009
by
Kevin Hilman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "davinci: video: restructuring to support vpif capture driver"
This reverts commit
86fa4ff5
.
parent
dcfd73d1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
298 deletions
+30
-298
arch/arm/mach-davinci/board-dm646x-evm.c
arch/arm/mach-davinci/board-dm646x-evm.c
+18
-209
arch/arm/mach-davinci/dm646x.c
arch/arm/mach-davinci/dm646x.c
+5
-47
arch/arm/mach-davinci/include/mach/dm646x.h
arch/arm/mach-davinci/include/mach/dm646x.h
+7
-42
No files found.
arch/arm/mach-davinci/board-dm646x-evm.c
View file @
2e2c32e2
...
...
@@ -33,7 +33,7 @@
#include <linux/i2c/at24.h>
#include <linux/i2c/pcf857x.h>
#include <linux/etherdevice.h>
#include <media/tvp514x.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
...
...
@@ -62,8 +62,8 @@
#define DM646X_EVM_PHY_MASK (0x2)
#define DM646X_EVM_MDIO_FREQUENCY (2200000)
/* PHY bus frequency */
#define VIDCLKCTL_OFFSET (
DAVINCI_SYSTEM_MODULE_BASE +
0x38)
#define VSCLKDIS_OFFSET (
DAVINCI_SYSTEM_MODULE_BASE +
0x6c)
#define VIDCLKCTL_OFFSET (0x38)
#define VSCLKDIS_OFFSET (0x6c)
#define VCH2CLK_MASK (BIT_MASK(10) | BIT_MASK(9) | BIT_MASK(8))
#define VCH2CLK_SYSCLK8 (BIT(9))
...
...
@@ -74,18 +74,6 @@
#define VIDCH2CLK (BIT(10))
#define VIDCH3CLK (BIT(11))
#define VIDCH1CLK (BIT(4))
#define TVP7002_INPUT (BIT(4))
#define TVP5147_INPUT (~BIT(4))
#define VPIF_INPUT_ONE_CHANNEL (BIT(5))
#define VPIF_INPUT_TWO_CHANNEL (~BIT(5))
#define TVP5147_CH0 "tvp514x-0"
#define TVP5147_CH1 "tvp514x-1"
static
void
__iomem
*
vpif_vidclkctl_reg
;
static
void
__iomem
*
vpif_vsclkdis_reg
;
/* spin lock for updating above registers */
static
spinlock_t
vpif_reg_lock
;
static
struct
davinci_uart_config
uart_config
__initdata
=
{
.
enabled_uarts
=
(
1
<<
0
),
...
...
@@ -359,7 +347,7 @@ static struct i2c_board_info __initdata i2c_info[] = {
I2C_BOARD_INFO
(
"cpld_reg0"
,
0x3a
),
},
{
I2C_BOARD_INFO
(
"cpld_video"
,
0x3
b
),
I2C_BOARD_INFO
(
"cpld_video"
,
0x3
B
),
},
{
I2C_BOARD_INFO
(
"tlv320aic33"
,
0x18
),
...
...
@@ -373,20 +361,18 @@ static struct davinci_i2c_platform_data i2c_pdata = {
static
int
set_vpif_clock
(
int
mux_mode
,
int
hd
)
{
unsigned
long
flags
;
unsigned
int
value
;
int
val
=
0
;
int
err
=
0
;
unsigned
int
value
;
void
__iomem
*
base
=
IO_ADDRESS
(
DAVINCI_SYSTEM_MODULE_BASE
);
if
(
!
vpif_vidclkctl_reg
||
!
vpif_vsclkdis_reg
||
!
cpld_client
)
if
(
!
cpld_client
)
return
-
ENXIO
;
/* disable the clock */
spin_lock_irqsave
(
&
vpif_reg_lock
,
flags
);
value
=
__raw_readl
(
vpif_vsclkdis_reg
);
value
=
__raw_readl
(
base
+
VSCLKDIS_OFFSET
);
value
|=
(
VIDCH3CLK
|
VIDCH2CLK
);
__raw_writel
(
value
,
vpif_vsclkdis_reg
);
spin_unlock_irqrestore
(
&
vpif_reg_lock
,
flags
);
__raw_writel
(
value
,
base
+
VSCLKDIS_OFFSET
);
val
=
i2c_smbus_read_byte
(
cpld_client
);
if
(
val
<
0
)
...
...
@@ -401,7 +387,7 @@ static int set_vpif_clock(int mux_mode, int hd)
if
(
err
)
return
err
;
value
=
__raw_readl
(
vpif_vidclkctl_reg
);
value
=
__raw_readl
(
base
+
VIDCLKCTL_OFFSET
);
value
&=
~
(
VCH2CLK_MASK
);
value
&=
~
(
VCH3CLK_MASK
);
...
...
@@ -410,30 +396,24 @@ static int set_vpif_clock(int mux_mode, int hd)
else
value
|=
(
VCH2CLK_AUXCLK
|
VCH3CLK_AUXCLK
);
__raw_writel
(
value
,
vpif_vidclkctl_reg
);
__raw_writel
(
value
,
base
+
VIDCLKCTL_OFFSET
);
/* enable the clock */
spin_lock_irqsave
(
&
vpif_reg_lock
,
flags
);
value
=
__raw_readl
(
vpif_vsclkdis_reg
);
value
=
__raw_readl
(
base
+
VSCLKDIS_OFFSET
);
value
&=
~
(
VIDCH3CLK
|
VIDCH2CLK
);
__raw_writel
(
value
,
vpif_vsclkdis_reg
);
spin_unlock_irqrestore
(
&
vpif_reg_lock
,
flags
);
__raw_writel
(
value
,
base
+
VSCLKDIS_OFFSET
);
return
0
;
}
static
struct
vpif_subdev_info
dm646x_vpif_subdev
[]
=
{
static
const
struct
vpif_subdev_info
dm646x_vpif_subdev
[]
=
{
{
.
addr
=
0x2A
,
.
name
=
"adv7343"
,
.
board_info
=
{
I2C_BOARD_INFO
(
"adv7343"
,
0x2a
),
},
},
{
.
addr
=
0x2C
,
.
name
=
"ths7303"
,
.
board_info
=
{
I2C_BOARD_INFO
(
"ths7303"
,
0x2c
),
},
},
};
...
...
@@ -443,7 +423,7 @@ static const char *output[] = {
"S-Video"
,
};
static
struct
vpif_
display_config
dm646x_vpif_display
_config
=
{
static
struct
vpif_
config
dm646x_vpif
_config
=
{
.
set_clock
=
set_vpif_clock
,
.
subdevinfo
=
dm646x_vpif_subdev
,
.
subdev_count
=
ARRAY_SIZE
(
dm646x_vpif_subdev
),
...
...
@@ -452,177 +432,6 @@ static struct vpif_display_config dm646x_vpif_display_config = {
.
card_name
=
"DM646x EVM"
,
};
/**
* setup_vpif_input_path()
* @channel: channel id (0 - CH0, 1 - CH1)
* @sub_dev_name: ptr sub device name
*
* This will set vpif input to capture data from tvp514x or
* tvp7002.
*/
static
int
setup_vpif_input_path
(
int
channel
,
const
char
*
sub_dev_name
)
{
int
err
=
0
;
int
val
;
/* for channel 1, we don't do anything */
if
(
channel
!=
0
)
return
0
;
if
(
!
cpld_client
)
return
-
ENXIO
;
val
=
i2c_smbus_read_byte
(
cpld_client
);
if
(
val
<
0
)
return
val
;
if
(
!
strcmp
(
sub_dev_name
,
TVP5147_CH0
)
||
!
strcmp
(
sub_dev_name
,
TVP5147_CH1
))
val
&=
TVP5147_INPUT
;
else
val
|=
TVP7002_INPUT
;
err
=
i2c_smbus_write_byte
(
cpld_client
,
val
);
if
(
err
)
return
err
;
return
0
;
}
/**
* setup_vpif_input_channel_mode()
* @mux_mode: mux mode. 0 - 1 channel or (1) - 2 channel
*
* This will setup input mode to one channel (TVP7002) or 2 channel (TVP5147)
*/
static
int
setup_vpif_input_channel_mode
(
int
mux_mode
)
{
unsigned
long
flags
;
int
err
=
0
;
int
val
;
u32
value
;
if
(
!
vpif_vsclkdis_reg
||
!
cpld_client
)
return
-
ENXIO
;
val
=
i2c_smbus_read_byte
(
cpld_client
);
if
(
val
<
0
)
return
val
;
spin_lock_irqsave
(
&
vpif_reg_lock
,
flags
);
value
=
__raw_readl
(
vpif_vsclkdis_reg
);
if
(
mux_mode
)
{
val
&=
VPIF_INPUT_TWO_CHANNEL
;
value
|=
VIDCH1CLK
;
}
else
{
val
|=
VPIF_INPUT_ONE_CHANNEL
;
value
&=
~
VIDCH1CLK
;
}
__raw_writel
(
value
,
vpif_vsclkdis_reg
);
spin_unlock_irqrestore
(
&
vpif_reg_lock
,
flags
);
err
=
i2c_smbus_write_byte
(
cpld_client
,
val
);
if
(
err
)
return
err
;
return
0
;
}
static
struct
tvp514x_platform_data
tvp5146_pdata
=
{
.
clk_polarity
=
0
,
.
hs_polarity
=
1
,
.
vs_polarity
=
1
};
#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
static
struct
vpif_subdev_info
vpif_capture_sdev_info
[]
=
{
{
.
name
=
TVP5147_CH0
,
.
board_info
=
{
I2C_BOARD_INFO
(
"tvp5146"
,
0x5d
),
.
platform_data
=
&
tvp5146_pdata
,
},
.
input
=
INPUT_CVBS_VI2B
,
.
output
=
OUTPUT_10BIT_422_EMBEDDED_SYNC
,
.
can_route
=
1
,
.
vpif_if
=
{
.
if_type
=
VPIF_IF_BT656
,
.
hd_pol
=
1
,
.
vd_pol
=
1
,
.
fid_pol
=
0
,
},
},
{
.
name
=
TVP5147_CH1
,
.
board_info
=
{
I2C_BOARD_INFO
(
"tvp5146"
,
0x5c
),
.
platform_data
=
&
tvp5146_pdata
,
},
.
input
=
INPUT_SVIDEO_VI2C_VI1C
,
.
output
=
OUTPUT_10BIT_422_EMBEDDED_SYNC
,
.
can_route
=
1
,
.
vpif_if
=
{
.
if_type
=
VPIF_IF_BT656
,
.
hd_pol
=
1
,
.
vd_pol
=
1
,
.
fid_pol
=
0
,
},
},
};
static
const
struct
vpif_input
dm6467_ch0_inputs
[]
=
{
{
.
input
=
{
.
index
=
0
,
.
name
=
"Composite"
,
.
type
=
V4L2_INPUT_TYPE_CAMERA
,
.
std
=
TVP514X_STD_ALL
,
},
.
subdev_name
=
TVP5147_CH0
,
},
};
static
const
struct
vpif_input
dm6467_ch1_inputs
[]
=
{
{
.
input
=
{
.
index
=
0
,
.
name
=
"S-Video"
,
.
type
=
V4L2_INPUT_TYPE_CAMERA
,
.
std
=
TVP514X_STD_ALL
,
},
.
subdev_name
=
TVP5147_CH1
,
},
};
static
struct
vpif_capture_config
dm646x_vpif_capture_cfg
=
{
.
setup_input_path
=
setup_vpif_input_path
,
.
setup_input_channel_mode
=
setup_vpif_input_channel_mode
,
.
subdev_info
=
vpif_capture_sdev_info
,
.
subdev_count
=
ARRAY_SIZE
(
vpif_capture_sdev_info
),
.
chan_config
[
0
]
=
{
.
inputs
=
dm6467_ch0_inputs
,
.
input_count
=
ARRAY_SIZE
(
dm6467_ch0_inputs
),
},
.
chan_config
[
1
]
=
{
.
inputs
=
dm6467_ch1_inputs
,
.
input_count
=
ARRAY_SIZE
(
dm6467_ch1_inputs
),
},
};
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
);
dm646x_setup_vpif
(
&
dm646x_vpif_display_config
,
&
dm646x_vpif_capture_cfg
);
}
static
void
__init
evm_init_i2c
(
void
)
{
davinci_init_i2c
(
&
i2c_pdata
);
...
...
@@ -650,7 +459,7 @@ static __init void evm_init(void)
soc_info
->
emac_pdata
->
phy_mask
=
DM646X_EVM_PHY_MASK
;
soc_info
->
emac_pdata
->
mdio_max_freq
=
DM646X_EVM_MDIO_FREQUENCY
;
evm_init_video
(
);
dm646x_setup_vpif
(
&
dm646x_vpif_config
);
}
static
__init
void
davinci_dm646x_evm_irq_init
(
void
)
...
...
arch/arm/mach-davinci/dm646x.c
View file @
2e2c32e2
...
...
@@ -700,23 +700,9 @@ static u64 vpif_dma_mask = DMA_BIT_MASK(32);
static
struct
resource
vpif_resource
[]
=
{
{
.
start
=
DAVINCI_VPIF_BASE
,
.
end
=
DAVINCI_VPIF_BASE
+
0x03ff
,
.
end
=
DAVINCI_VPIF_BASE
+
0x03ff
f
,
.
flags
=
IORESOURCE_MEM
,
}
};
static
struct
platform_device
vpif_dev
=
{
.
name
=
"vpif"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
vpif_dma_mask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
resource
=
vpif_resource
,
.
num_resources
=
ARRAY_SIZE
(
vpif_resource
),
};
static
struct
resource
vpif_display_resource
[]
=
{
{
.
start
=
IRQ_DM646X_VP_VERTINT2
,
.
end
=
IRQ_DM646X_VP_VERTINT2
,
...
...
@@ -736,32 +722,8 @@ static struct platform_device vpif_display_dev = {
.
dma_mask
=
&
vpif_dma_mask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
resource
=
vpif_display_resource
,
.
num_resources
=
ARRAY_SIZE
(
vpif_display_resource
),
};
static
struct
resource
vpif_capture_resource
[]
=
{
{
.
start
=
IRQ_DM646X_VP_VERTINT0
,
.
end
=
IRQ_DM646X_VP_VERTINT0
,
.
flags
=
IORESOURCE_IRQ
,
},
{
.
start
=
IRQ_DM646X_VP_VERTINT1
,
.
end
=
IRQ_DM646X_VP_VERTINT1
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
vpif_capture_dev
=
{
.
name
=
"vpif_capture"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
vpif_dma_mask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
.
resource
=
vpif_capture_resource
,
.
num_resources
=
ARRAY_SIZE
(
vpif_capture_resource
),
.
resource
=
vpif_resource
,
.
num_resources
=
ARRAY_SIZE
(
vpif_resource
),
};
/*----------------------------------------------------------------------*/
...
...
@@ -892,8 +854,7 @@ void __init dm646x_init_mcasp1(struct snd_platform_data *pdata)
platform_device_register
(
&
dm646x_dit_device
);
}
void
dm646x_setup_vpif
(
struct
vpif_display_config
*
display_config
,
struct
vpif_capture_config
*
capture_config
)
void
dm646x_setup_vpif
(
struct
vpif_config
*
config
)
{
unsigned
int
value
;
void
__iomem
*
base
=
IO_ADDRESS
(
DAVINCI_SYSTEM_MODULE_BASE
);
...
...
@@ -911,11 +872,8 @@ void dm646x_setup_vpif(struct vpif_display_config *display_config,
davinci_cfg_reg
(
DM646X_PTSOMUX_DISABLE
);
davinci_cfg_reg
(
DM646X_PTSIMUX_DISABLE
);
vpif_display_dev
.
dev
.
platform_data
=
display_config
;
vpif_capture_dev
.
dev
.
platform_data
=
capture_config
;
platform_device_register
(
&
vpif_dev
);
vpif_display_dev
.
dev
.
platform_data
=
config
;
platform_device_register
(
&
vpif_display_dev
);
platform_device_register
(
&
vpif_capture_dev
);
}
void
__init
dm646x_init
(
void
)
...
...
arch/arm/mach-davinci/include/mach/dm646x.h
View file @
2e2c32e2
...
...
@@ -14,8 +14,6 @@
#include <mach/hardware.h>
#include <mach/emac.h>
#include <mach/asp.h>
#include <linux/i2c.h>
#include <linux/videodev2.h>
#define DM646X_EMAC_BASE (0x01C80000)
#define DM646X_EMAC_CNTRL_OFFSET (0x0000)
...
...
@@ -33,59 +31,26 @@ void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
void
dm646x_video_init
(
void
);
enum
vpif_if_type
{
VPIF_IF_BT656
,
VPIF_IF_BT1120
,
VPIF_IF_RAW_BAYER
};
struct
vpif_interface
{
enum
vpif_if_type
if_type
;
unsigned
hd_pol
:
1
;
unsigned
vd_pol
:
1
;
unsigned
fid_pol
:
1
;
struct
vpif_output
{
u16
id
;
const
char
*
name
;
};
struct
vpif_subdev_info
{
unsigned
short
addr
;
const
char
*
name
;
struct
i2c_board_info
board_info
;
u32
input
;
u32
output
;
unsigned
can_route
:
1
;
struct
vpif_interface
vpif_if
;
};
struct
vpif_
display_
config
{
struct
vpif_config
{
int
(
*
set_clock
)(
int
,
int
);
struct
vpif_subdev_info
*
subdevinfo
;
const
struct
vpif_subdev_info
*
subdevinfo
;
int
subdev_count
;
const
char
**
output
;
int
output_count
;
const
char
*
card_name
;
};
struct
vpif_input
{
struct
v4l2_input
input
;
const
char
*
subdev_name
;
};
#define VPIF_CAPTURE_MAX_CHANNELS 2
struct
vpif_capture_chan_config
{
const
struct
vpif_input
*
inputs
;
int
input_count
;
};
struct
vpif_capture_config
{
int
(
*
setup_input_channel_mode
)(
int
);
int
(
*
setup_input_path
)(
int
,
const
char
*
);
struct
vpif_capture_chan_config
chan_config
[
VPIF_CAPTURE_MAX_CHANNELS
];
struct
vpif_subdev_info
*
subdev_info
;
int
subdev_count
;
const
char
*
card_name
;
};
void
dm646x_setup_vpif
(
struct
vpif_display_config
*
,
struct
vpif_capture_config
*
);
void
dm646x_setup_vpif
(
struct
vpif_config
*
config
);
#endif
/* __ASM_ARCH_DM646X_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment