[POWERPC] fsl_spi: stop using device_type = "spi"
Also: - rename "fsl_spi" to "fsl,spi"; - add and use cell-index property, if found; - split probing code out of fsl_spi_init, thus we can call it for legacy device_type probing and new "compatible" probing. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
parent
59a0ea5091
commit
f3a2b29d93
|
@ -1568,8 +1568,8 @@ platforms are moved over to use the flattened-device-tree model.
|
||||||
ii) SPI (Serial Peripheral Interface)
|
ii) SPI (Serial Peripheral Interface)
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- device_type : should be "spi".
|
- cell-index : SPI controller index.
|
||||||
- compatible : should be "fsl_spi".
|
- compatible : should be "fsl,spi".
|
||||||
- mode : the SPI operation mode, it can be "cpu" or "cpu-qe".
|
- mode : the SPI operation mode, it can be "cpu" or "cpu-qe".
|
||||||
- reg : Offset and length of the register set for the device
|
- reg : Offset and length of the register set for the device
|
||||||
- interrupts : <a b> where a is the interrupt number and b is a
|
- interrupts : <a b> where a is the interrupt number and b is a
|
||||||
|
@ -1582,8 +1582,8 @@ platforms are moved over to use the flattened-device-tree model.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
spi@4c0 {
|
spi@4c0 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <4c0 40>;
|
reg = <4c0 40>;
|
||||||
interrupts = <82 0>;
|
interrupts = <82 0>;
|
||||||
interrupt-parent = <700>;
|
interrupt-parent = <700>;
|
||||||
|
|
|
@ -130,8 +130,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <7000 1000>;
|
reg = <7000 1000>;
|
||||||
interrupts = <10 8>;
|
interrupts = <10 8>;
|
||||||
interrupt-parent = < &ipic >;
|
interrupt-parent = < &ipic >;
|
||||||
|
|
|
@ -223,8 +223,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@4c0 {
|
spi@4c0 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <4c0 40>;
|
reg = <4c0 40>;
|
||||||
interrupts = <2>;
|
interrupts = <2>;
|
||||||
interrupt-parent = < &qeic >;
|
interrupt-parent = < &qeic >;
|
||||||
|
@ -232,8 +232,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@500 {
|
spi@500 {
|
||||||
device_type = "spi";
|
cell-index = <1>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <500 40>;
|
reg = <500 40>;
|
||||||
interrupts = <1>;
|
interrupts = <1>;
|
||||||
interrupt-parent = < &qeic >;
|
interrupt-parent = < &qeic >;
|
||||||
|
|
|
@ -184,8 +184,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@4c0 {
|
spi@4c0 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <4c0 40>;
|
reg = <4c0 40>;
|
||||||
interrupts = <2>;
|
interrupts = <2>;
|
||||||
interrupt-parent = <&qeic>;
|
interrupt-parent = <&qeic>;
|
||||||
|
@ -193,8 +193,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@500 {
|
spi@500 {
|
||||||
device_type = "spi";
|
cell-index = <1>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <500 40>;
|
reg = <500 40>;
|
||||||
interrupts = <1>;
|
interrupts = <1>;
|
||||||
interrupt-parent = <&qeic>;
|
interrupt-parent = <&qeic>;
|
||||||
|
|
|
@ -82,8 +82,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <7000 1000>;
|
reg = <7000 1000>;
|
||||||
interrupts = <10 8>;
|
interrupts = <10 8>;
|
||||||
interrupt-parent = < &ipic >;
|
interrupt-parent = < &ipic >;
|
||||||
|
|
|
@ -80,8 +80,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <7000 1000>;
|
reg = <7000 1000>;
|
||||||
interrupts = <10 8>;
|
interrupts = <10 8>;
|
||||||
interrupt-parent = < &ipic >;
|
interrupt-parent = < &ipic >;
|
||||||
|
|
|
@ -95,8 +95,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <0x7000 0x1000>;
|
reg = <0x7000 0x1000>;
|
||||||
interrupts = <16 8>;
|
interrupts = <16 8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
|
|
|
@ -225,8 +225,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@4c0 {
|
spi@4c0 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <4c0 40>;
|
reg = <4c0 40>;
|
||||||
interrupts = <2>;
|
interrupts = <2>;
|
||||||
interrupt-parent = < &qeic >;
|
interrupt-parent = < &qeic >;
|
||||||
|
@ -234,8 +234,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@500 {
|
spi@500 {
|
||||||
device_type = "spi";
|
cell-index = <1>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <500 40>;
|
reg = <500 40>;
|
||||||
interrupts = <1>;
|
interrupts = <1>;
|
||||||
interrupt-parent = < &qeic >;
|
interrupt-parent = < &qeic >;
|
||||||
|
|
|
@ -83,7 +83,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
compatible = "fsl_spi";
|
cell-index = <0>;
|
||||||
|
compatible = "fsl,spi";
|
||||||
reg = <0x7000 0x1000>;
|
reg = <0x7000 0x1000>;
|
||||||
interrupts = <0x10 0x8>;
|
interrupts = <0x10 0x8>;
|
||||||
interrupt-parent = < &ipic >;
|
interrupt-parent = < &ipic >;
|
||||||
|
|
|
@ -83,7 +83,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
compatible = "fsl_spi";
|
cell-index = <0>;
|
||||||
|
compatible = "fsl,spi";
|
||||||
reg = <0x7000 0x1000>;
|
reg = <0x7000 0x1000>;
|
||||||
interrupts = <0x10 0x8>;
|
interrupts = <0x10 0x8>;
|
||||||
interrupt-parent = < &ipic >;
|
interrupt-parent = < &ipic >;
|
||||||
|
|
|
@ -83,7 +83,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
compatible = "fsl_spi";
|
cell-index = <0>;
|
||||||
|
compatible = "fsl,spi";
|
||||||
reg = <0x7000 0x1000>;
|
reg = <0x7000 0x1000>;
|
||||||
interrupts = <0x10 0x8>;
|
interrupts = <0x10 0x8>;
|
||||||
interrupt-parent = < &ipic >;
|
interrupt-parent = < &ipic >;
|
||||||
|
|
|
@ -302,8 +302,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@4c0 {
|
spi@4c0 {
|
||||||
device_type = "spi";
|
cell-index = <0>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <4c0 40>;
|
reg = <4c0 40>;
|
||||||
interrupts = <2>;
|
interrupts = <2>;
|
||||||
interrupt-parent = <&qeic>;
|
interrupt-parent = <&qeic>;
|
||||||
|
@ -311,8 +311,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@500 {
|
spi@500 {
|
||||||
device_type = "spi";
|
cell-index = <1>;
|
||||||
compatible = "fsl_spi";
|
compatible = "fsl,spi";
|
||||||
reg = <500 40>;
|
reg = <500 40>;
|
||||||
interrupts = <1>;
|
interrupts = <1>;
|
||||||
interrupt-parent = <&qeic>;
|
interrupt-parent = <&qeic>;
|
||||||
|
|
|
@ -87,7 +87,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@7000 {
|
spi@7000 {
|
||||||
compatible = "fsl_spi";
|
cell-index = <0>;
|
||||||
|
compatible = "fsl,spi";
|
||||||
reg = <0x7000 0x1000>;
|
reg = <0x7000 0x1000>;
|
||||||
interrupts = <0x10 0x8>;
|
interrupts = <0x10 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
|
|
|
@ -1276,44 +1276,17 @@ arch_initcall(cpm_smc_uart_of_init);
|
||||||
#endif /* CONFIG_8xx */
|
#endif /* CONFIG_8xx */
|
||||||
#endif /* CONFIG_PPC_CPM_NEW_BINDING */
|
#endif /* CONFIG_PPC_CPM_NEW_BINDING */
|
||||||
|
|
||||||
int __init fsl_spi_init(struct spi_board_info *board_infos,
|
static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk,
|
||||||
|
struct spi_board_info *board_infos,
|
||||||
unsigned int num_board_infos,
|
unsigned int num_board_infos,
|
||||||
void (*activate_cs)(u8 cs, u8 polarity),
|
void (*activate_cs)(u8 cs, u8 polarity),
|
||||||
void (*deactivate_cs)(u8 cs, u8 polarity))
|
void (*deactivate_cs)(u8 cs, u8 polarity))
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
unsigned int i;
|
unsigned int i = 0;
|
||||||
u32 sysclk = -1;
|
|
||||||
|
|
||||||
/* SPI controller is either clocked from QE or SoC clock */
|
for_each_compatible_node(np, type, compatible) {
|
||||||
#ifdef CONFIG_QUICC_ENGINE
|
int ret;
|
||||||
sysclk = get_brgfreq();
|
|
||||||
#endif
|
|
||||||
if (sysclk == -1) {
|
|
||||||
const u32 *freq;
|
|
||||||
int size;
|
|
||||||
|
|
||||||
np = of_find_node_by_type(NULL, "soc");
|
|
||||||
if (!np)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
freq = of_get_property(np, "clock-frequency", &size);
|
|
||||||
if (!freq || size != sizeof(*freq) || *freq == 0) {
|
|
||||||
freq = of_get_property(np, "bus-frequency", &size);
|
|
||||||
if (!freq || size != sizeof(*freq) || *freq == 0) {
|
|
||||||
of_node_put(np);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sysclk = *freq;
|
|
||||||
of_node_put(np);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (np = NULL, i = 1;
|
|
||||||
(np = of_find_compatible_node(np, "spi", "fsl_spi")) != NULL;
|
|
||||||
i++) {
|
|
||||||
int ret = 0;
|
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
const void *prop;
|
const void *prop;
|
||||||
struct resource res[2];
|
struct resource res[2];
|
||||||
|
@ -1332,6 +1305,10 @@ int __init fsl_spi_init(struct spi_board_info *board_infos,
|
||||||
goto err;
|
goto err;
|
||||||
pdata.bus_num = *(u32 *)prop;
|
pdata.bus_num = *(u32 *)prop;
|
||||||
|
|
||||||
|
prop = of_get_property(np, "cell-index", NULL);
|
||||||
|
if (prop)
|
||||||
|
i = *(u32 *)prop;
|
||||||
|
|
||||||
prop = of_get_property(np, "mode", NULL);
|
prop = of_get_property(np, "mode", NULL);
|
||||||
if (prop && !strcmp(prop, "cpu-qe"))
|
if (prop && !strcmp(prop, "cpu-qe"))
|
||||||
pdata.qe_mode = 1;
|
pdata.qe_mode = 1;
|
||||||
|
@ -1342,7 +1319,7 @@ int __init fsl_spi_init(struct spi_board_info *board_infos,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pdata.max_chipselect)
|
if (!pdata.max_chipselect)
|
||||||
goto err;
|
continue;
|
||||||
|
|
||||||
ret = of_address_to_resource(np, 0, &res[0]);
|
ret = of_address_to_resource(np, 0, &res[0]);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -1369,13 +1346,58 @@ int __init fsl_spi_init(struct spi_board_info *board_infos,
|
||||||
if (ret)
|
if (ret)
|
||||||
goto unreg;
|
goto unreg;
|
||||||
|
|
||||||
continue;
|
goto next;
|
||||||
unreg:
|
unreg:
|
||||||
platform_device_del(pdev);
|
platform_device_del(pdev);
|
||||||
err:
|
err:
|
||||||
continue;
|
pr_err("%s: registration failed\n", np->full_name);
|
||||||
|
next:
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __init fsl_spi_init(struct spi_board_info *board_infos,
|
||||||
|
unsigned int num_board_infos,
|
||||||
|
void (*activate_cs)(u8 cs, u8 polarity),
|
||||||
|
void (*deactivate_cs)(u8 cs, u8 polarity))
|
||||||
|
{
|
||||||
|
u32 sysclk = -1;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
#ifdef CONFIG_QUICC_ENGINE
|
||||||
|
/* SPI controller is either clocked from QE or SoC clock */
|
||||||
|
sysclk = get_brgfreq();
|
||||||
|
#endif
|
||||||
|
if (sysclk == -1) {
|
||||||
|
struct device_node *np;
|
||||||
|
const u32 *freq;
|
||||||
|
int size;
|
||||||
|
|
||||||
|
np = of_find_node_by_type(NULL, "soc");
|
||||||
|
if (!np)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
freq = of_get_property(np, "clock-frequency", &size);
|
||||||
|
if (!freq || size != sizeof(*freq) || *freq == 0) {
|
||||||
|
freq = of_get_property(np, "bus-frequency", &size);
|
||||||
|
if (!freq || size != sizeof(*freq) || *freq == 0) {
|
||||||
|
of_node_put(np);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sysclk = *freq;
|
||||||
|
of_node_put(np);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = of_fsl_spi_probe(NULL, "fsl,spi", sysclk, board_infos,
|
||||||
|
num_board_infos, activate_cs, deactivate_cs);
|
||||||
|
if (!ret)
|
||||||
|
of_fsl_spi_probe("spi", "fsl_spi", sysclk, board_infos,
|
||||||
|
num_board_infos, activate_cs, deactivate_cs);
|
||||||
|
|
||||||
return spi_register_board_info(board_infos, num_board_infos);
|
return spi_register_board_info(board_infos, num_board_infos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue