Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 67328
b: refs/heads/master
c: 26f6cb9
h: refs/heads/master
v: v3
  • Loading branch information
Anton Vorontsov authored and Kumar Gala committed Sep 14, 2007
1 parent 4b07e22 commit 0eaa1ff
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: af6a9aabc106b70ab03d6665c713bca3dd3cb195
refs/heads/master: 26f6cb999366a71b8e318bceaf8fafc1ffecae40
87 changes: 87 additions & 0 deletions trunk/arch/powerpc/sysdev/fsl_soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <linux/platform_device.h>
#include <linux/of_platform.h>
#include <linux/phy.h>
#include <linux/spi/spi.h>
#include <linux/fsl_devices.h>
#include <linux/fs_enet_pd.h>
#include <linux/fs_uart_pd.h>
Expand Down Expand Up @@ -1199,3 +1200,89 @@ static int __init cpm_smc_uart_of_init(void)
arch_initcall(cpm_smc_uart_of_init);

#endif /* CONFIG_8xx */

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))
{
struct device_node *np;
unsigned int i;
const u32 *sysclk;

np = of_find_node_by_type(NULL, "qe");
if (!np)
return -ENODEV;

sysclk = of_get_property(np, "bus-frequency", NULL);
if (!sysclk)
return -ENODEV;

for (np = NULL, i = 1;
(np = of_find_compatible_node(np, "spi", "fsl_spi")) != NULL;
i++) {
int ret = 0;
unsigned int j;
const void *prop;
struct resource res[2];
struct platform_device *pdev;
struct fsl_spi_platform_data pdata = {
.activate_cs = activate_cs,
.deactivate_cs = deactivate_cs,
};

memset(res, 0, sizeof(res));

pdata.sysclk = *sysclk;

prop = of_get_property(np, "reg", NULL);
if (!prop)
goto err;
pdata.bus_num = *(u32 *)prop;

prop = of_get_property(np, "mode", NULL);
if (prop && !strcmp(prop, "cpu-qe"))
pdata.qe_mode = 1;

for (j = 0; j < num_board_infos; j++) {
if (board_infos[j].bus_num == pdata.bus_num)
pdata.max_chipselect++;
}

if (!pdata.max_chipselect)
goto err;

ret = of_address_to_resource(np, 0, &res[0]);
if (ret)
goto err;

ret = of_irq_to_resource(np, 0, &res[1]);
if (ret == NO_IRQ)
goto err;

pdev = platform_device_alloc("mpc83xx_spi", i);
if (!pdev)
goto err;

ret = platform_device_add_data(pdev, &pdata, sizeof(pdata));
if (ret)
goto unreg;

ret = platform_device_add_resources(pdev, res,
ARRAY_SIZE(res));
if (ret)
goto unreg;

ret = platform_device_register(pdev);
if (ret)
goto unreg;

continue;
unreg:
platform_device_del(pdev);
err:
continue;
}

return spi_register_board_info(board_infos, num_board_infos);
}
7 changes: 7 additions & 0 deletions trunk/arch/powerpc/sysdev/fsl_soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,12 @@ extern phys_addr_t get_immrbase(void);
extern u32 get_brgfreq(void);
extern u32 get_baudrate(void);

struct spi_board_info;

extern int 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));

#endif
#endif

0 comments on commit 0eaa1ff

Please sign in to comment.