Linux Audio

Check our new training course

Loading...
v6.2
 1/*
 2 * This file is subject to the terms and conditions of the GNU General Public
 3 * License.  See the file "COPYING" in the main directory of this archive
 4 * for more details.
 5 *
 6 * Copyright (C) 2009-2011 Florian Fainelli <florian@openwrt.org>
 7 * Copyright (C) 2010 Tanguy Bouzeloc <tanguy.bouzeloc@efixo.com>
 8 */
 9
10#include <linux/init.h>
11#include <linux/kernel.h>
12#include <linux/export.h>
13#include <linux/platform_device.h>
14#include <linux/err.h>
15#include <linux/clk.h>
16
17#include <bcm63xx_cpu.h>
18#include <bcm63xx_dev_spi.h>
19#include <bcm63xx_regs.h>
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21static struct resource spi_resources[] = {
22	{
23		.start		= -1, /* filled at runtime */
24		.end		= -1, /* filled at runtime */
25		.flags		= IORESOURCE_MEM,
26	},
27	{
28		.start		= -1, /* filled at runtime */
29		.flags		= IORESOURCE_IRQ,
30	},
31};
32
 
 
 
 
 
33static struct platform_device bcm63xx_spi_device = {
 
34	.id		= -1,
35	.num_resources	= ARRAY_SIZE(spi_resources),
36	.resource	= spi_resources,
 
 
 
37};
38
39int __init bcm63xx_spi_register(void)
40{
41	if (BCMCPU_IS_6328() || BCMCPU_IS_6345())
42		return -ENODEV;
43
44	spi_resources[0].start = bcm63xx_regset_address(RSET_SPI);
45	spi_resources[0].end = spi_resources[0].start;
46	spi_resources[1].start = bcm63xx_get_irq_number(IRQ_SPI);
47
48	if (BCMCPU_IS_6338() || BCMCPU_IS_6348()) {
49		bcm63xx_spi_device.name = "bcm6348-spi",
50		spi_resources[0].end += BCM_6348_RSET_SPI_SIZE - 1;
 
 
 
51	}
52
53	if (BCMCPU_IS_3368() || BCMCPU_IS_6358() || BCMCPU_IS_6362() ||
54		BCMCPU_IS_6368()) {
55		bcm63xx_spi_device.name = "bcm6358-spi",
56		spi_resources[0].end += BCM_6358_RSET_SPI_SIZE - 1;
 
 
 
57	}
 
 
58
59	return platform_device_register(&bcm63xx_spi_device);
60}
v3.15
  1/*
  2 * This file is subject to the terms and conditions of the GNU General Public
  3 * License.  See the file "COPYING" in the main directory of this archive
  4 * for more details.
  5 *
  6 * Copyright (C) 2009-2011 Florian Fainelli <florian@openwrt.org>
  7 * Copyright (C) 2010 Tanguy Bouzeloc <tanguy.bouzeloc@efixo.com>
  8 */
  9
 10#include <linux/init.h>
 11#include <linux/kernel.h>
 12#include <linux/export.h>
 13#include <linux/platform_device.h>
 14#include <linux/err.h>
 15#include <linux/clk.h>
 16
 17#include <bcm63xx_cpu.h>
 18#include <bcm63xx_dev_spi.h>
 19#include <bcm63xx_regs.h>
 20
 21#ifdef BCMCPU_RUNTIME_DETECT
 22/*
 23 * register offsets
 24 */
 25static const unsigned long bcm6348_regs_spi[] = {
 26	__GEN_SPI_REGS_TABLE(6348)
 27};
 28
 29static const unsigned long bcm6358_regs_spi[] = {
 30	__GEN_SPI_REGS_TABLE(6358)
 31};
 32
 33const unsigned long *bcm63xx_regs_spi;
 34EXPORT_SYMBOL(bcm63xx_regs_spi);
 35
 36static __init void bcm63xx_spi_regs_init(void)
 37{
 38	if (BCMCPU_IS_6338() || BCMCPU_IS_6348())
 39		bcm63xx_regs_spi = bcm6348_regs_spi;
 40	if (BCMCPU_IS_3368() || BCMCPU_IS_6358() ||
 41		BCMCPU_IS_6362() || BCMCPU_IS_6368())
 42		bcm63xx_regs_spi = bcm6358_regs_spi;
 43}
 44#else
 45static __init void bcm63xx_spi_regs_init(void) { }
 46#endif
 47
 48static struct resource spi_resources[] = {
 49	{
 50		.start		= -1, /* filled at runtime */
 51		.end		= -1, /* filled at runtime */
 52		.flags		= IORESOURCE_MEM,
 53	},
 54	{
 55		.start		= -1, /* filled at runtime */
 56		.flags		= IORESOURCE_IRQ,
 57	},
 58};
 59
 60static struct bcm63xx_spi_pdata spi_pdata = {
 61	.bus_num		= 0,
 62	.num_chipselect		= 8,
 63};
 64
 65static struct platform_device bcm63xx_spi_device = {
 66	.name		= "bcm63xx-spi",
 67	.id		= -1,
 68	.num_resources	= ARRAY_SIZE(spi_resources),
 69	.resource	= spi_resources,
 70	.dev		= {
 71		.platform_data = &spi_pdata,
 72	},
 73};
 74
 75int __init bcm63xx_spi_register(void)
 76{
 77	if (BCMCPU_IS_6328() || BCMCPU_IS_6345())
 78		return -ENODEV;
 79
 80	spi_resources[0].start = bcm63xx_regset_address(RSET_SPI);
 81	spi_resources[0].end = spi_resources[0].start;
 82	spi_resources[1].start = bcm63xx_get_irq_number(IRQ_SPI);
 83
 84	if (BCMCPU_IS_6338() || BCMCPU_IS_6348()) {
 
 85		spi_resources[0].end += BCM_6348_RSET_SPI_SIZE - 1;
 86		spi_pdata.fifo_size = SPI_6348_MSG_DATA_SIZE;
 87		spi_pdata.msg_type_shift = SPI_6348_MSG_TYPE_SHIFT;
 88		spi_pdata.msg_ctl_width = SPI_6348_MSG_CTL_WIDTH;
 89	}
 90
 91	if (BCMCPU_IS_3368() || BCMCPU_IS_6358() || BCMCPU_IS_6362() ||
 92		BCMCPU_IS_6368()) {
 
 93		spi_resources[0].end += BCM_6358_RSET_SPI_SIZE - 1;
 94		spi_pdata.fifo_size = SPI_6358_MSG_DATA_SIZE;
 95		spi_pdata.msg_type_shift = SPI_6358_MSG_TYPE_SHIFT;
 96		spi_pdata.msg_ctl_width = SPI_6358_MSG_CTL_WIDTH;
 97	}
 98
 99	bcm63xx_spi_regs_init();
100
101	return platform_device_register(&bcm63xx_spi_device);
102}