forked from Minki/linux
Merge remote-tracking branch 'agust/next' into next
mpc5xxx updates from Anatolij
This commit is contained in:
commit
9aae341287
41
Documentation/devicetree/bindings/misc/ifm-csi.txt
Normal file
41
Documentation/devicetree/bindings/misc/ifm-csi.txt
Normal file
@ -0,0 +1,41 @@
|
||||
IFM camera sensor interface on mpc5200 LocalPlus bus
|
||||
|
||||
Required properties:
|
||||
- compatible: "ifm,o2d-csi"
|
||||
- reg: specifies sensor chip select number and associated address range
|
||||
- interrupts: external interrupt line number and interrupt sense mode
|
||||
of the interrupt line signaling frame valid events
|
||||
- gpios: three gpio-specifiers for "capture", "reset" and "master enable"
|
||||
GPIOs (strictly in this order).
|
||||
- ifm,csi-clk-handle: the phandle to a node in the DT describing the sensor
|
||||
clock generator. This node is usually a general purpose timer controller.
|
||||
- ifm,csi-addr-bus-width: address bus width (valid values are 16, 24, 25)
|
||||
- ifm,csi-data-bus-width: data bus width (valid values are 8 and 16)
|
||||
- ifm,csi-wait-cycles: sensor bus wait cycles
|
||||
|
||||
Optional properties:
|
||||
- ifm,csi-byte-swap: if this property is present, the byte swapping on
|
||||
the bus will be enabled.
|
||||
|
||||
Example:
|
||||
|
||||
csi@3,0 {
|
||||
compatible = "ifm,o2d-csi";
|
||||
reg = <3 0 0x00100000>; /* CS 3, 1 MiB range */
|
||||
interrupts = <1 1 2>; /* IRQ1, edge falling */
|
||||
|
||||
ifm,csi-clk-handle = <&timer7>;
|
||||
gpios = <&gpio_simple 23 0 /* image_capture */
|
||||
&gpio_simple 26 0 /* image_reset */
|
||||
&gpio_simple 29 0>; /* image_master_en */
|
||||
|
||||
ifm,csi-addr-bus-width = <24>;
|
||||
ifm,csi-data-bus-width = <8>;
|
||||
ifm,csi-wait-cycles = <0>;
|
||||
};
|
||||
|
||||
The base address of the used chip select is specified in the
|
||||
ranges property of the parent localbus node, for example:
|
||||
|
||||
ranges = <0 0 0xff000000 0x01000000
|
||||
3 0 0xe3000000 0x00100000>;
|
47
arch/powerpc/boot/dts/o2d.dts
Normal file
47
arch/powerpc/boot/dts/o2d.dts
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* O2D Device Tree Source
|
||||
*
|
||||
* Copyright (C) 2012 DENX Software Engineering
|
||||
* Anatolij Gustschin <agust@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "o2d.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ifm,o2d";
|
||||
compatible = "ifm,o2d";
|
||||
|
||||
memory {
|
||||
reg = <0x00000000 0x08000000>; // 128MB
|
||||
};
|
||||
|
||||
localbus {
|
||||
ranges = <0 0 0xfc000000 0x02000000
|
||||
3 0 0xe3000000 0x00100000>;
|
||||
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 0x02000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
|
||||
partition@60000 {
|
||||
label = "kernel";
|
||||
reg = <0x00060000 0x00260000>;
|
||||
read-only;
|
||||
};
|
||||
/* o2d specific partitions */
|
||||
partition@2c0000 {
|
||||
label = "o2d user defined";
|
||||
reg = <0x002c0000 0x01d40000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
139
arch/powerpc/boot/dts/o2d.dtsi
Normal file
139
arch/powerpc/boot/dts/o2d.dtsi
Normal file
@ -0,0 +1,139 @@
|
||||
/*
|
||||
* O2D base Device Tree Source
|
||||
*
|
||||
* Copyright (C) 2012 DENX Software Engineering
|
||||
* Anatolij Gustschin <agust@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "mpc5200b.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ifm,o2d";
|
||||
compatible = "ifm,o2d";
|
||||
|
||||
memory {
|
||||
reg = <0x00000000 0x04000000>; // 64MB
|
||||
};
|
||||
|
||||
soc5200@f0000000 {
|
||||
|
||||
gpio_simple: gpio@b00 {
|
||||
};
|
||||
|
||||
timer@600 { // General Purpose Timer
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
fsl,has-wdt;
|
||||
fsl,wdt-on-boot = <0>;
|
||||
};
|
||||
|
||||
timer@610 {
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
};
|
||||
|
||||
timer7: timer@670 {
|
||||
};
|
||||
|
||||
rtc@800 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
psc@2000 { // PSC1
|
||||
compatible = "fsl,mpc5200b-psc-spi","fsl,mpc5200-psc-spi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
cell-index = <0>;
|
||||
|
||||
spidev@0 {
|
||||
compatible = "spidev";
|
||||
spi-max-frequency = <250000>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
psc@2200 { // PSC2
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
psc@2400 { // PSC3
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
psc@2600 { // PSC4
|
||||
compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||
};
|
||||
|
||||
psc@2800 { // PSC5
|
||||
compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
|
||||
};
|
||||
|
||||
psc@2c00 { // PSC6
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ethernet@3000 {
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
||||
mdio@3000 {
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
sclpc@3c00 {
|
||||
compatible = "fsl,mpc5200-lpbfifo";
|
||||
reg = <0x3c00 0x60>;
|
||||
interrupts = <3 23 0>;
|
||||
};
|
||||
};
|
||||
|
||||
localbus {
|
||||
ranges = <0 0 0xff000000 0x01000000
|
||||
3 0 0xe3000000 0x00100000>;
|
||||
|
||||
// flash device at LocalPlus Bus CS0
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 0x01000000>;
|
||||
bank-width = <1>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
no-unaligned-direct-access;
|
||||
|
||||
/* common layout for all machines */
|
||||
partition@0 {
|
||||
label = "u-boot";
|
||||
reg = <0x00000000 0x00040000>;
|
||||
read-only;
|
||||
};
|
||||
partition@40000 {
|
||||
label = "env";
|
||||
reg = <0x00040000 0x00020000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
|
||||
csi@3,0 {
|
||||
compatible = "ifm,o2d-csi";
|
||||
reg = <3 0 0x00100000>;
|
||||
ifm,csi-clk-handle = <&timer7>;
|
||||
gpios = <&gpio_simple 23 0 /* imag_capture */
|
||||
&gpio_simple 26 0 /* imag_reset */
|
||||
&gpio_simple 29 0>; /* imag_master_en */
|
||||
|
||||
interrupts = <1 1 2>; /* IRQ1, edge falling */
|
||||
|
||||
ifm,csi-addr-bus-width = <24>;
|
||||
ifm,csi-data-bus-width = <8>;
|
||||
ifm,csi-wait-cycles = <0>;
|
||||
};
|
||||
};
|
||||
};
|
52
arch/powerpc/boot/dts/o2d300.dts
Normal file
52
arch/powerpc/boot/dts/o2d300.dts
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* O2D300 Device Tree Source
|
||||
*
|
||||
* Copyright (C) 2012 DENX Software Engineering
|
||||
* Anatolij Gustschin <agust@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "o2d.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ifm,o2d300";
|
||||
compatible = "ifm,o2d";
|
||||
|
||||
localbus {
|
||||
ranges = <0 0 0xfc000000 0x02000000
|
||||
3 0 0xe3000000 0x00100000>;
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 0x02000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
|
||||
partition@40000 {
|
||||
label = "env_1";
|
||||
reg = <0x00040000 0x00020000>;
|
||||
read-only;
|
||||
};
|
||||
partition@60000 {
|
||||
label = "env_2";
|
||||
reg = <0x00060000 0x00020000>;
|
||||
read-only;
|
||||
};
|
||||
partition@80000 {
|
||||
label = "kernel";
|
||||
reg = <0x00080000 0x00260000>;
|
||||
read-only;
|
||||
};
|
||||
/* o2d300 specific partitions */
|
||||
partition@2e0000 {
|
||||
label = "o2d300 user defined";
|
||||
reg = <0x002e0000 0x01d20000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
48
arch/powerpc/boot/dts/o2dnt2.dts
Normal file
48
arch/powerpc/boot/dts/o2dnt2.dts
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* O2DNT2 Device Tree Source
|
||||
*
|
||||
* Copyright (C) 2012 DENX Software Engineering
|
||||
* Anatolij Gustschin <agust@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "o2d.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ifm,o2dnt2";
|
||||
compatible = "ifm,o2d";
|
||||
|
||||
memory {
|
||||
reg = <0x00000000 0x08000000>; // 128MB
|
||||
};
|
||||
|
||||
localbus {
|
||||
ranges = <0 0 0xfc000000 0x02000000
|
||||
3 0 0xe3000000 0x00100000>;
|
||||
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 0x02000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
|
||||
partition@60000 {
|
||||
label = "kernel";
|
||||
reg = <0x00060000 0x00260000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
/* o2dnt2 specific partitions */
|
||||
partition@2c0000 {
|
||||
label = "o2dnt2 user defined";
|
||||
reg = <0x002c0000 0x01d40000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
33
arch/powerpc/boot/dts/o2i.dts
Normal file
33
arch/powerpc/boot/dts/o2i.dts
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* O2I Device Tree Source
|
||||
*
|
||||
* Copyright (C) 2012 DENX Software Engineering
|
||||
* Anatolij Gustschin <agust@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "o2d.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ifm,o2i";
|
||||
compatible = "ifm,o2d";
|
||||
|
||||
localbus {
|
||||
flash@0,0 {
|
||||
partition@60000 {
|
||||
label = "kernel";
|
||||
reg = <0x00060000 0x00260000>;
|
||||
read-only;
|
||||
};
|
||||
/* o2i specific partitions */
|
||||
partition@2c0000 {
|
||||
label = "o2i user defined";
|
||||
reg = <0x002c0000 0x00d40000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
33
arch/powerpc/boot/dts/o2mnt.dts
Normal file
33
arch/powerpc/boot/dts/o2mnt.dts
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* O2MNT Device Tree Source
|
||||
*
|
||||
* Copyright (C) 2012 DENX Software Engineering
|
||||
* Anatolij Gustschin <agust@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "o2d.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ifm,o2mnt";
|
||||
compatible = "ifm,o2d";
|
||||
|
||||
localbus {
|
||||
flash@0,0 {
|
||||
partition@60000 {
|
||||
label = "kernel";
|
||||
reg = <0x00060000 0x00260000>;
|
||||
read-only;
|
||||
};
|
||||
/* add o2mnt specific partitions */
|
||||
partition@2c0000 {
|
||||
label = "o2mnt user defined";
|
||||
reg = <0x002c0000 0x00d40000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
48
arch/powerpc/boot/dts/o3dnt.dts
Normal file
48
arch/powerpc/boot/dts/o3dnt.dts
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* O3DNT Device Tree Source
|
||||
*
|
||||
* Copyright (C) 2012 DENX Software Engineering
|
||||
* Anatolij Gustschin <agust@denx.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "o2d.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ifm,o3dnt";
|
||||
compatible = "ifm,o2d";
|
||||
|
||||
memory {
|
||||
reg = <0x00000000 0x04000000>; // 64MB
|
||||
};
|
||||
|
||||
localbus {
|
||||
ranges = <0 0 0xfc000000 0x01000000
|
||||
3 0 0xe3000000 0x00100000>;
|
||||
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 0x01000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
|
||||
partition@60000 {
|
||||
label = "kernel";
|
||||
reg = <0x00060000 0x00260000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
/* o3dnt specific partitions */
|
||||
partition@2c0000 {
|
||||
label = "o3dnt user defined";
|
||||
reg = <0x002c0000 0x00d40000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -307,6 +307,7 @@ struct mpc52xx_lpbfifo_request {
|
||||
size_t size;
|
||||
size_t pos; /* current position of transfer */
|
||||
int flags;
|
||||
int defer_xfer_start;
|
||||
|
||||
/* What to do when finished */
|
||||
void (*callback)(struct mpc52xx_lpbfifo_request *);
|
||||
@ -323,6 +324,7 @@ struct mpc52xx_lpbfifo_request {
|
||||
extern int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req);
|
||||
extern void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req);
|
||||
extern void mpc52xx_lpbfifo_poll(void);
|
||||
extern int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req);
|
||||
|
||||
/* mpc52xx_pic.c */
|
||||
extern void mpc52xx_init_irq(void);
|
||||
|
@ -2,6 +2,7 @@ config PPC_MPC512x
|
||||
bool "512x-based boards"
|
||||
depends on 6xx
|
||||
select FSL_SOC
|
||||
select FB_FSL_DIU
|
||||
select IPIC
|
||||
select PPC_CLOCK
|
||||
select PPC_PCI_CHOICE
|
||||
|
@ -54,14 +54,16 @@ static DEFINE_MUTEX(clocks_mutex);
|
||||
static struct clk *mpc5121_clk_get(struct device *dev, const char *id)
|
||||
{
|
||||
struct clk *p, *clk = ERR_PTR(-ENOENT);
|
||||
int dev_match = 0;
|
||||
int id_match = 0;
|
||||
int dev_match;
|
||||
int id_match;
|
||||
|
||||
if (dev == NULL || id == NULL)
|
||||
return clk;
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
list_for_each_entry(p, &clocks, node) {
|
||||
dev_match = id_match = 0;
|
||||
|
||||
if (dev == p->dev)
|
||||
dev_match++;
|
||||
if (strcmp(id, p->name) == 0)
|
||||
|
@ -191,8 +191,6 @@ mpc512x_valid_monitor_port(enum fsl_diu_monitor_port port)
|
||||
|
||||
static struct fsl_diu_shared_fb __attribute__ ((__aligned__(8))) diu_shared_fb;
|
||||
|
||||
#if defined(CONFIG_FB_FSL_DIU) || \
|
||||
defined(CONFIG_FB_FSL_DIU_MODULE)
|
||||
static inline void mpc512x_free_bootmem(struct page *page)
|
||||
{
|
||||
__ClearPageReserved(page);
|
||||
@ -220,7 +218,6 @@ void mpc512x_release_bootmem(void)
|
||||
}
|
||||
diu_ops.release_bootmem = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Check if DIU was pre-initialized. If so, perform steps
|
||||
@ -323,15 +320,12 @@ void __init mpc512x_setup_diu(void)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CONFIG_FB_FSL_DIU) || \
|
||||
defined(CONFIG_FB_FSL_DIU_MODULE)
|
||||
diu_ops.get_pixel_format = mpc512x_get_pixel_format;
|
||||
diu_ops.set_gamma_table = mpc512x_set_gamma_table;
|
||||
diu_ops.set_monitor_port = mpc512x_set_monitor_port;
|
||||
diu_ops.set_pixel_clock = mpc512x_set_pixel_clock;
|
||||
diu_ops.valid_monitor_port = mpc512x_valid_monitor_port;
|
||||
diu_ops.release_bootmem = mpc512x_release_bootmem;
|
||||
#endif
|
||||
}
|
||||
|
||||
void __init mpc512x_init_IRQ(void)
|
||||
|
@ -52,6 +52,7 @@ static void __init mpc5200_simple_setup_arch(void)
|
||||
static const char *board[] __initdata = {
|
||||
"anonymous,a4m072",
|
||||
"anon,charon",
|
||||
"ifm,o2d",
|
||||
"intercontrol,digsy-mtc",
|
||||
"manroland,mucmc52",
|
||||
"manroland,uc101",
|
||||
|
@ -170,7 +170,8 @@ static void mpc52xx_lpbfifo_kick(struct mpc52xx_lpbfifo_request *req)
|
||||
out_be32(lpbfifo.regs + LPBFIFO_REG_CONTROL, bit_fields);
|
||||
|
||||
/* Kick it off */
|
||||
out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01);
|
||||
if (!lpbfifo.req->defer_xfer_start)
|
||||
out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01);
|
||||
if (dma)
|
||||
bcom_enable(lpbfifo.bcom_cur_task);
|
||||
}
|
||||
@ -421,6 +422,38 @@ int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req)
|
||||
}
|
||||
EXPORT_SYMBOL(mpc52xx_lpbfifo_submit);
|
||||
|
||||
int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (!lpbfifo.regs)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&lpbfifo.lock, flags);
|
||||
|
||||
/*
|
||||
* If the req pointer is already set and a transfer was
|
||||
* started on submit, then this transfer is in progress
|
||||
*/
|
||||
if (lpbfifo.req && !lpbfifo.req->defer_xfer_start) {
|
||||
spin_unlock_irqrestore(&lpbfifo.lock, flags);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the req was previously submitted but not
|
||||
* started, start it now
|
||||
*/
|
||||
if (lpbfifo.req && lpbfifo.req == req &&
|
||||
lpbfifo.req->defer_xfer_start) {
|
||||
out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&lpbfifo.lock, flags);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(mpc52xx_lpbfifo_start_xfer);
|
||||
|
||||
void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
Loading…
Reference in New Issue
Block a user