aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd
diff options
context:
space:
mode:
authorSundar Iyer <sundar.iyer@stericsson.com>2010-12-24 05:52:08 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2011-01-14 06:38:14 -0500
commit6680d940b80dbb0617226c5b76b071a3977feb1c (patch)
treed5d745b134f2a5ac1f4bfc05be584573f02d6fab /drivers/mfd
parent1d83864cab272f764beb381bbd3837f91fc0abed (diff)
mfd/ab8500: remove spi support
Since the Ab8500 v1.0, the SPI support is deprecated on the HW. Signed-off-by: Sundar Iyer <sundar.iyer@stericsson.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd')
-rw-r--r--drivers/mfd/Kconfig8
-rw-r--r--drivers/mfd/Makefile2
-rw-r--r--drivers/mfd/ab8500-spi.c143
3 files changed, 5 insertions, 148 deletions
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index c32b62a8a1f6..fd018366d670 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -496,13 +496,13 @@ config EZX_PCAP
496 496
497config AB8500_CORE 497config AB8500_CORE
498 bool "ST-Ericsson AB8500 Mixed Signal Power Management chip" 498 bool "ST-Ericsson AB8500 Mixed Signal Power Management chip"
499 depends on GENERIC_HARDIRQS && ABX500_CORE && SPI_MASTER 499 depends on GENERIC_HARDIRQS && ABX500_CORE
500 select MFD_CORE 500 select MFD_CORE
501 help 501 help
502 Select this option to enable access to AB8500 power management 502 Select this option to enable access to AB8500 power management
503 chip. This connects to U8500 either on the SSP/SPI bus 503 chip. This connects to U8500 either on the SSP/SPI bus (deprecated
504 or the I2C bus via PRCMU. It also adds the irq_chip 504 since hardware version v1.0) or the I2C bus via PRCMU. It also adds
505 parts for handling the Mixed Signal chip events. 505 the irq_chip parts for handling the Mixed Signal chip events.
506 This chip embeds various other multimedia funtionalities as well. 506 This chip embeds various other multimedia funtionalities as well.
507 507
508config AB8500_I2C_CORE 508config AB8500_I2C_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 5f35de9386e3..a54e2c7c6a1c 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -70,7 +70,7 @@ obj-$(CONFIG_ABX500_CORE) += abx500-core.o
70obj-$(CONFIG_AB3100_CORE) += ab3100-core.o 70obj-$(CONFIG_AB3100_CORE) += ab3100-core.o
71obj-$(CONFIG_AB3100_OTP) += ab3100-otp.o 71obj-$(CONFIG_AB3100_OTP) += ab3100-otp.o
72obj-$(CONFIG_AB3550_CORE) += ab3550-core.o 72obj-$(CONFIG_AB3550_CORE) += ab3550-core.o
73obj-$(CONFIG_AB8500_CORE) += ab8500-core.o ab8500-spi.o 73obj-$(CONFIG_AB8500_CORE) += ab8500-core.o
74obj-$(CONFIG_AB8500_I2C_CORE) += ab8500-i2c.o 74obj-$(CONFIG_AB8500_I2C_CORE) += ab8500-i2c.o
75obj-$(CONFIG_AB8500_DEBUG) += ab8500-debugfs.o 75obj-$(CONFIG_AB8500_DEBUG) += ab8500-debugfs.o
76obj-$(CONFIG_MFD_TIMBERDALE) += timberdale.o 76obj-$(CONFIG_MFD_TIMBERDALE) += timberdale.o
diff --git a/drivers/mfd/ab8500-spi.c b/drivers/mfd/ab8500-spi.c
deleted file mode 100644
index b1653421edb5..000000000000
--- a/drivers/mfd/ab8500-spi.c
+++ /dev/null
@@ -1,143 +0,0 @@
1/*
2 * Copyright (C) ST-Ericsson SA 2010
3 *
4 * License Terms: GNU General Public License v2
5 * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
6 */
7
8#include <linux/kernel.h>
9#include <linux/slab.h>
10#include <linux/init.h>
11#include <linux/module.h>
12#include <linux/platform_device.h>
13#include <linux/spi/spi.h>
14#include <linux/mfd/ab8500.h>
15
16/*
17 * This funtion writes to any AB8500 registers using
18 * SPI protocol & before it writes it packs the data
19 * in the below 24 bit frame format
20 *
21 * *|------------------------------------|
22 * *| 23|22...18|17.......10|9|8|7......0|
23 * *| r/w bank adr data |
24 * * ------------------------------------
25 *
26 * This function shouldn't be called from interrupt
27 * context
28 */
29static int ab8500_spi_write(struct ab8500 *ab8500, u16 addr, u8 data)
30{
31 struct spi_device *spi = container_of(ab8500->dev, struct spi_device,
32 dev);
33 unsigned long spi_data = addr << 10 | data;
34 struct spi_transfer xfer;
35 struct spi_message msg;
36
37 ab8500->tx_buf[0] = spi_data;
38 ab8500->rx_buf[0] = 0;
39
40 xfer.tx_buf = ab8500->tx_buf;
41 xfer.rx_buf = NULL;
42 xfer.len = sizeof(unsigned long);
43
44 spi_message_init(&msg);
45 spi_message_add_tail(&xfer, &msg);
46
47 return spi_sync(spi, &msg);
48}
49
50static int ab8500_spi_read(struct ab8500 *ab8500, u16 addr)
51{
52 struct spi_device *spi = container_of(ab8500->dev, struct spi_device,
53 dev);
54 unsigned long spi_data = 1 << 23 | addr << 10;
55 struct spi_transfer xfer;
56 struct spi_message msg;
57 int ret;
58
59 ab8500->tx_buf[0] = spi_data;
60 ab8500->rx_buf[0] = 0;
61
62 xfer.tx_buf = ab8500->tx_buf;
63 xfer.rx_buf = ab8500->rx_buf;
64 xfer.len = sizeof(unsigned long);
65
66 spi_message_init(&msg);
67 spi_message_add_tail(&xfer, &msg);
68
69 ret = spi_sync(spi, &msg);
70 if (!ret)
71 /*
72 * Only the 8 lowermost bytes are
73 * defined with value, the rest may
74 * vary depending on chip/board noise.
75 */
76 ret = ab8500->rx_buf[0] & 0xFFU;
77
78 return ret;
79}
80
81static int __devinit ab8500_spi_probe(struct spi_device *spi)
82{
83 struct ab8500 *ab8500;
84 int ret;
85
86 spi->bits_per_word = 24;
87 ret = spi_setup(spi);
88 if (ret < 0)
89 return ret;
90
91 ab8500 = kzalloc(sizeof *ab8500, GFP_KERNEL);
92 if (!ab8500)
93 return -ENOMEM;
94
95 ab8500->dev = &spi->dev;
96 ab8500->irq = spi->irq;
97
98 ab8500->read = ab8500_spi_read;
99 ab8500->write = ab8500_spi_write;
100
101 spi_set_drvdata(spi, ab8500);
102
103 ret = ab8500_init(ab8500);
104 if (ret)
105 kfree(ab8500);
106
107 return ret;
108}
109
110static int __devexit ab8500_spi_remove(struct spi_device *spi)
111{
112 struct ab8500 *ab8500 = spi_get_drvdata(spi);
113
114 ab8500_exit(ab8500);
115 kfree(ab8500);
116
117 return 0;
118}
119
120static struct spi_driver ab8500_spi_driver = {
121 .driver = {
122 .name = "ab8500-spi",
123 .owner = THIS_MODULE,
124 },
125 .probe = ab8500_spi_probe,
126 .remove = __devexit_p(ab8500_spi_remove)
127};
128
129static int __init ab8500_spi_init(void)
130{
131 return spi_register_driver(&ab8500_spi_driver);
132}
133subsys_initcall(ab8500_spi_init);
134
135static void __exit ab8500_spi_exit(void)
136{
137 spi_unregister_driver(&ab8500_spi_driver);
138}
139module_exit(ab8500_spi_exit);
140
141MODULE_AUTHOR("Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com");
142MODULE_DESCRIPTION("AB8500 SPI");
143MODULE_LICENSE("GPL v2");