Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
9acacb13
Commit
9acacb13
authored
Feb 11, 2012
by
Nicolas Ferre
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'armsoc/at91/device-board' into at91-3.4-base2
parents
018b5e16
92b0b639
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
209 additions
and
23 deletions
+209
-23
arch/arm/mach-at91/at91sam9263_devices.c
arch/arm/mach-at91/at91sam9263_devices.c
+10
-3
arch/arm/mach-at91/at91sam9g45_devices.c
arch/arm/mach-at91/at91sam9g45_devices.c
+104
-9
arch/arm/mach-at91/at91sam9rl_devices.c
arch/arm/mach-at91/at91sam9rl_devices.c
+1
-7
arch/arm/mach-at91/board-flexibity.c
arch/arm/mach-at91/board-flexibity.c
+11
-1
arch/arm/mach-at91/board-sam9m10g45ek.c
arch/arm/mach-at91/board-sam9m10g45ek.c
+78
-2
arch/arm/mach-at91/include/mach/board.h
arch/arm/mach-at91/include/mach/board.h
+5
-1
No files found.
arch/arm/mach-at91/at91sam9263_devices.c
View file @
9acacb13
...
...
@@ -891,7 +891,8 @@ static struct platform_device at91sam9263_isi_device = {
.
num_resources
=
ARRAY_SIZE
(
isi_resources
),
};
void
__init
at91_add_device_isi
(
void
)
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{
at91_set_A_periph
(
AT91_PIN_PE0
,
0
);
/* ISI_D0 */
at91_set_A_periph
(
AT91_PIN_PE1
,
0
);
/* ISI_D1 */
...
...
@@ -904,14 +905,20 @@ void __init at91_add_device_isi(void)
at91_set_A_periph
(
AT91_PIN_PE8
,
0
);
/* ISI_PCK */
at91_set_A_periph
(
AT91_PIN_PE9
,
0
);
/* ISI_HSYNC */
at91_set_A_periph
(
AT91_PIN_PE10
,
0
);
/* ISI_VSYNC */
at91_set_B_periph
(
AT91_PIN_PE11
,
0
);
/* ISI_MCK (PCK3) */
at91_set_B_periph
(
AT91_PIN_PE12
,
0
);
/* ISI_PD8 */
at91_set_B_periph
(
AT91_PIN_PE13
,
0
);
/* ISI_PD9 */
at91_set_B_periph
(
AT91_PIN_PE14
,
0
);
/* ISI_PD10 */
at91_set_B_periph
(
AT91_PIN_PE15
,
0
);
/* ISI_PD11 */
if
(
use_pck_as_mck
)
{
at91_set_B_periph
(
AT91_PIN_PE11
,
0
);
/* ISI_MCK (PCK3) */
/* TODO: register the PCK for ISI_MCK and set its parent */
}
}
#else
void
__init
at91_add_device_isi
(
void
)
{}
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{}
#endif
...
...
arch/arm/mach-at91/at91sam9g45_devices.c
View file @
9acacb13
...
...
@@ -14,6 +14,7 @@
#include <linux/dma-mapping.h>
#include <linux/gpio.h>
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/i2c-gpio.h>
#include <linux/atmel-mci.h>
...
...
@@ -28,7 +29,10 @@
#include <mach/at_hdmac.h>
#include <mach/atmel-mci.h>
#include <media/atmel-isi.h>
#include "generic.h"
#include "clock.h"
/* --------------------------------------------------------------------
...
...
@@ -38,10 +42,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at_dma_platform_data
atdma_pdata
=
{
.
nr_channels
=
8
,
};
static
struct
resource
hdmac_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91SAM9G45_BASE_DMA
,
...
...
@@ -56,12 +56,11 @@ static struct resource hdmac_resources[] = {
};
static
struct
platform_device
at_hdmac_device
=
{
.
name
=
"at
_hdmac
"
,
.
name
=
"at
91sam9g45_dma
"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
hdmac_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
atdma_pdata
,
},
.
resource
=
hdmac_resources
,
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
...
...
@@ -69,9 +68,15 @@ static struct platform_device at_hdmac_device = {
void
__init
at91_add_device_hdmac
(
void
)
{
dma_cap_set
(
DMA_MEMCPY
,
atdma_pdata
.
cap_mask
);
dma_cap_set
(
DMA_SLAVE
,
atdma_pdata
.
cap_mask
);
platform_device_register
(
&
at_hdmac_device
);
#if defined(CONFIG_OF)
struct
device_node
*
of_node
=
of_find_node_by_name
(
NULL
,
"dma-controller"
);
if
(
of_node
)
of_node_put
(
of_node
);
else
#endif
platform_device_register
(
&
at_hdmac_device
);
}
#else
void
__init
at91_add_device_hdmac
(
void
)
{}
...
...
@@ -869,6 +874,96 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data)
void
__init
at91_add_device_ac97
(
struct
ac97c_platform_data
*
data
)
{}
#endif
/* --------------------------------------------------------------------
* Image Sensor Interface
* -------------------------------------------------------------------- */
#if defined(CONFIG_VIDEO_ATMEL_ISI) || defined(CONFIG_VIDEO_ATMEL_ISI_MODULE)
static
u64
isi_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
isi_platform_data
isi_data
;
struct
resource
isi_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91SAM9G45_BASE_ISI
,
.
end
=
AT91SAM9G45_BASE_ISI
+
SZ_16K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
AT91SAM9G45_ID_ISI
,
.
end
=
AT91SAM9G45_ID_ISI
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
at91sam9g45_isi_device
=
{
.
name
=
"atmel_isi"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
&
isi_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
isi_data
,
},
.
resource
=
isi_resources
,
.
num_resources
=
ARRAY_SIZE
(
isi_resources
),
};
static
struct
clk_lookup
isi_mck_lookups
[]
=
{
CLKDEV_CON_DEV_ID
(
"isi_mck"
,
"atmel_isi.0"
,
NULL
),
};
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{
struct
clk
*
pck
;
struct
clk
*
parent
;
if
(
!
data
)
return
;
isi_data
=
*
data
;
at91_set_A_periph
(
AT91_PIN_PB20
,
0
);
/* ISI_D0 */
at91_set_A_periph
(
AT91_PIN_PB21
,
0
);
/* ISI_D1 */
at91_set_A_periph
(
AT91_PIN_PB22
,
0
);
/* ISI_D2 */
at91_set_A_periph
(
AT91_PIN_PB23
,
0
);
/* ISI_D3 */
at91_set_A_periph
(
AT91_PIN_PB24
,
0
);
/* ISI_D4 */
at91_set_A_periph
(
AT91_PIN_PB25
,
0
);
/* ISI_D5 */
at91_set_A_periph
(
AT91_PIN_PB26
,
0
);
/* ISI_D6 */
at91_set_A_periph
(
AT91_PIN_PB27
,
0
);
/* ISI_D7 */
at91_set_A_periph
(
AT91_PIN_PB28
,
0
);
/* ISI_PCK */
at91_set_A_periph
(
AT91_PIN_PB30
,
0
);
/* ISI_HSYNC */
at91_set_A_periph
(
AT91_PIN_PB29
,
0
);
/* ISI_VSYNC */
at91_set_B_periph
(
AT91_PIN_PB8
,
0
);
/* ISI_PD8 */
at91_set_B_periph
(
AT91_PIN_PB9
,
0
);
/* ISI_PD9 */
at91_set_B_periph
(
AT91_PIN_PB10
,
0
);
/* ISI_PD10 */
at91_set_B_periph
(
AT91_PIN_PB11
,
0
);
/* ISI_PD11 */
platform_device_register
(
&
at91sam9g45_isi_device
);
if
(
use_pck_as_mck
)
{
at91_set_B_periph
(
AT91_PIN_PB31
,
0
);
/* ISI_MCK (PCK1) */
pck
=
clk_get
(
NULL
,
"pck1"
);
parent
=
clk_get
(
NULL
,
"plla"
);
BUG_ON
(
IS_ERR
(
pck
)
||
IS_ERR
(
parent
));
if
(
clk_set_parent
(
pck
,
parent
))
{
pr_err
(
"Failed to set PCK's parent
\n
"
);
}
else
{
/* Register PCK as ISI_MCK */
isi_mck_lookups
[
0
].
clk
=
pck
;
clkdev_add_table
(
isi_mck_lookups
,
ARRAY_SIZE
(
isi_mck_lookups
));
}
clk_put
(
pck
);
clk_put
(
parent
);
}
}
#else
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
)
{}
#endif
/* --------------------------------------------------------------------
* LCD Controller
...
...
arch/arm/mach-at91/at91sam9rl_devices.c
View file @
9acacb13
...
...
@@ -33,10 +33,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static
u64
hdmac_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
at_dma_platform_data
atdma_pdata
=
{
.
nr_channels
=
2
,
};
static
struct
resource
hdmac_resources
[]
=
{
[
0
]
=
{
.
start
=
AT91SAM9RL_BASE_DMA
,
...
...
@@ -51,12 +47,11 @@ static struct resource hdmac_resources[] = {
};
static
struct
platform_device
at_hdmac_device
=
{
.
name
=
"at
_hdmac
"
,
.
name
=
"at
91sam9rl_dma
"
,
.
id
=
-
1
,
.
dev
=
{
.
dma_mask
=
&
hdmac_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
atdma_pdata
,
},
.
resource
=
hdmac_resources
,
.
num_resources
=
ARRAY_SIZE
(
hdmac_resources
),
...
...
@@ -64,7 +59,6 @@ static struct platform_device at_hdmac_device = {
void
__init
at91_add_device_hdmac
(
void
)
{
dma_cap_set
(
DMA_MEMCPY
,
atdma_pdata
.
cap_mask
);
platform_device_register
(
&
at_hdmac_device
);
}
#else
...
...
arch/arm/mach-at91/board-flexibity.c
View file @
9acacb13
/*
* linux/arch/arm/mach-at91/board-flexibity.c
*
* Copyright (C) 2010 Flexibity
* Copyright (C) 2010
-2011
Flexibity
* Copyright (C) 2005 SAN People
* Copyright (C) 2006 Atmel
*
...
...
@@ -62,6 +62,13 @@ static struct at91_udc_data __initdata flexibity_udc_data = {
.
pullup_pin
=
-
EINVAL
,
/* pull-up driven by UDC */
};
/* I2C devices */
static
struct
i2c_board_info
__initdata
flexibity_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"ds1307"
,
0x68
),
},
};
/* SPI devices */
static
struct
spi_board_info
flexibity_spi_devices
[]
=
{
{
/* DataFlash chip */
...
...
@@ -141,6 +148,9 @@ static void __init flexibity_board_init(void)
at91_add_device_usbh
(
&
flexibity_usbh_data
);
/* USB Device */
at91_add_device_udc
(
&
flexibity_udc_data
);
/* I2C */
at91_add_device_i2c
(
flexibity_i2c_devices
,
ARRAY_SIZE
(
flexibity_i2c_devices
));
/* SPI */
at91_add_device_spi
(
flexibity_spi_devices
,
ARRAY_SIZE
(
flexibity_spi_devices
));
...
...
arch/arm/mach-at91/board-sam9m10g45ek.c
View file @
9acacb13
...
...
@@ -24,11 +24,13 @@
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/leds.h>
#include <linux/clk.h>
#include <linux/atmel-mci.h>
#include <linux/delay.h>
#include <mach/hardware.h>
#include <video/atmel_lcdc.h>
#include <media/soc_camera.h>
#include <media/atmel-isi.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
...
...
@@ -184,6 +186,71 @@ static void __init ek_add_device_nand(void)
}
/*
* ISI
*/
static
struct
isi_platform_data
__initdata
isi_data
=
{
.
frate
=
ISI_CFG1_FRATE_CAPTURE_ALL
,
/* to use codec and preview path simultaneously */
.
full_mode
=
1
,
.
data_width_flags
=
ISI_DATAWIDTH_8
|
ISI_DATAWIDTH_10
,
/* ISI_MCK is provided by programmable clock or external clock */
.
mck_hz
=
25000000
,
};
/*
* soc-camera OV2640
*/
#if defined(CONFIG_SOC_CAMERA_OV2640) || \
defined(CONFIG_SOC_CAMERA_OV2640_MODULE)
static
unsigned
long
isi_camera_query_bus_param
(
struct
soc_camera_link
*
link
)
{
/* ISI board for ek using default 8-bits connection */
return
SOCAM_DATAWIDTH_8
;
}
static
int
i2c_camera_power
(
struct
device
*
dev
,
int
on
)
{
/* enable or disable the camera */
pr_debug
(
"%s: %s the camera
\n
"
,
__func__
,
on
?
"ENABLE"
:
"DISABLE"
);
at91_set_gpio_output
(
AT91_PIN_PD13
,
!
on
);
if
(
!
on
)
goto
out
;
/* If enabled, give a reset impulse */
at91_set_gpio_output
(
AT91_PIN_PD12
,
0
);
msleep
(
20
);
at91_set_gpio_output
(
AT91_PIN_PD12
,
1
);
msleep
(
100
);
out:
return
0
;
}
static
struct
i2c_board_info
i2c_camera
=
{
I2C_BOARD_INFO
(
"ov2640"
,
0x30
),
};
static
struct
soc_camera_link
iclink_ov2640
=
{
.
bus_id
=
0
,
.
board_info
=
&
i2c_camera
,
.
i2c_adapter_id
=
0
,
.
power
=
i2c_camera_power
,
.
query_bus_param
=
isi_camera_query_bus_param
,
};
static
struct
platform_device
isi_ov2640
=
{
.
name
=
"soc-camera-pdrv"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
iclink_ov2640
,
},
};
#endif
/*
* LCD Controller
*/
...
...
@@ -377,7 +444,12 @@ static struct gpio_led ek_pwm_led[] = {
#endif
};
static
struct
platform_device
*
devices
[]
__initdata
=
{
#if defined(CONFIG_SOC_CAMERA_OV2640) || \
defined(CONFIG_SOC_CAMERA_OV2640_MODULE)
&
isi_ov2640
,
#endif
};
static
void
__init
ek_board_init
(
void
)
{
...
...
@@ -399,6 +471,8 @@ static void __init ek_board_init(void)
ek_add_device_nand
();
/* I2C */
at91_add_device_i2c
(
0
,
NULL
,
0
);
/* ISI, using programmable clock as ISI_MCK */
at91_add_device_isi
(
&
isi_data
,
true
);
/* LCD Controller */
at91_add_device_lcdc
(
&
ek_lcdc_data
);
/* Touch Screen */
...
...
@@ -410,6 +484,8 @@ static void __init ek_board_init(void)
/* LEDs */
at91_gpio_leds
(
ek_leds
,
ARRAY_SIZE
(
ek_leds
));
at91_pwm_leds
(
ek_pwm_led
,
ARRAY_SIZE
(
ek_pwm_led
));
/* Other platform devices */
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
}
MACHINE_START
(
AT91SAM9M10G45EK
,
"Atmel AT91SAM9M10G45-EK"
)
...
...
arch/arm/mach-at91/include/mach/board.h
View file @
9acacb13
...
...
@@ -107,6 +107,8 @@ struct atmel_nand_data {
u8
ale
;
/* address line number connected to ALE */
u8
cle
;
/* address line number connected to CLE */
u8
bus_width_16
;
/* buswidth is 16 bit */
u8
correction_cap
;
/* PMECC correction capability */
u16
sector_size
;
/* Sector size for PMECC */
struct
mtd_partition
*
parts
;
unsigned
int
num_parts
;
};
...
...
@@ -179,7 +181,9 @@ extern void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data);
extern
void
__init
at91_add_device_ac97
(
struct
ac97c_platform_data
*
data
);
/* ISI */
extern
void
__init
at91_add_device_isi
(
void
);
struct
isi_platform_data
;
extern
void
__init
at91_add_device_isi
(
struct
isi_platform_data
*
data
,
bool
use_pck_as_mck
);
/* Touchscreen Controller */
struct
at91_tsadcc_data
{
...
...
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