Commit 4567e54d authored by Imre Deak's avatar Imre Deak Committed by Tony Lindgren

ARM: OMAP: TSC2101: add platform init / registration to board files

H2 / H3 boards use this chip, update their board files.
Signed-off-by: default avatarImre Deak <imre.deak@solidboot.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 46382683
......@@ -28,6 +28,9 @@
#include <linux/mtd/partitions.h>
#include <linux/input.h>
#include <linux/workqueue.h>
#include <linux/spi/spi.h>
#include <linux/spi/tsc2101.h>
#include <linux/clk.h>
#include <asm/hardware.h>
#include <asm/mach-types.h>
......@@ -297,6 +300,78 @@ static struct platform_device h2_lcd_device = {
.id = -1,
};
struct {
struct clk *mclk;
int initialized;
} h2_tsc2101;
#define TSC2101_MUX_MCLK_ON R10_1610_MCLK_ON
#define TSC2101_MUX_MCLK_OFF R10_1610_MCLK_OFF
static int h2_tsc2101_init(struct spi_device *spi)
{
int r;
if (h2_tsc2101.initialized) {
printk(KERN_ERR "tsc2101: already initialized\n");
return -ENODEV;
}
/* Get the MCLK */
h2_tsc2101.mclk = clk_get(&spi->dev, "mclk");
if (IS_ERR(h2_tsc2101.mclk)) {
dev_err(&spi->dev, "unable to get the clock MCLK\n");
return PTR_ERR(h2_tsc2101.mclk);
}
if ((r = clk_set_rate(h2_tsc2101.mclk, 12000000)) < 0) {
dev_err(&spi->dev, "unable to set rate to the MCLK\n");
goto err;
}
omap_cfg_reg(TSC2101_MUX_MCLK_OFF);
omap_cfg_reg(N15_1610_UWIRE_CS1);
return 0;
err:
clk_put(h2_tsc2101.mclk);
return r;
}
static void h2_tsc2101_cleanup(struct spi_device *spi)
{
clk_put(h2_tsc2101.mclk);
omap_cfg_reg(TSC2101_MUX_MCLK_OFF);
}
static void h2_tsc2101_enable_mclk(struct spi_device *spi)
{
omap_cfg_reg(TSC2101_MUX_MCLK_ON);
clk_enable(h2_tsc2101.mclk);
}
static void h2_tsc2101_disable_mclk(struct spi_device *spi)
{
clk_disable(h2_tsc2101.mclk);
omap_cfg_reg(R10_1610_MCLK_OFF);
}
static struct tsc2101_platform_data h2_tsc2101_platform_data = {
.init = h2_tsc2101_init,
.cleanup = h2_tsc2101_cleanup,
.enable_mclk = h2_tsc2101_enable_mclk,
.disable_mclk = h2_tsc2101_disable_mclk,
};
static struct spi_board_info h2_spi_board_info[] __initdata = {
[0] = {
.modalias = "tsc2101",
.bus_num = 2,
.chip_select = 1,
.max_speed_hz = 16000000,
.platform_data = &h2_tsc2101_platform_data,
},
};
static struct omap_mcbsp_reg_cfg mcbsp_regs = {
.spcr2 = FREE | FRST | GRST | XRST | XINTM(3),
.spcr1 = RINTM(3) | RRST,
......@@ -443,6 +518,8 @@ static void __init h2_init(void)
#endif
platform_add_devices(h2_devices, ARRAY_SIZE(h2_devices));
spi_register_board_info(h2_spi_board_info,
ARRAY_SIZE(h2_spi_board_info));
omap_board_config = h2_config;
omap_board_config_size = ARRAY_SIZE(h2_config);
omap_serial_init();
......
......@@ -25,6 +25,9 @@
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
#include <linux/input.h>
#include <linux/clk.h>
#include <linux/spi/spi.h>
#include <linux/spi/tsc2101.h>
#include <asm/setup.h>
#include <asm/page.h>
......@@ -371,6 +374,89 @@ static struct platform_device h3_lcd_device = {
.id = -1,
};
struct {
struct clk *mclk;
int initialized;
} h3_tsc2101;
#define TSC2101_MUX_MCLK_ON V5_1710_MCLK_ON
#define TSC2101_MUX_MCLK_OFF V5_1710_MCLK_OFF
static int h3_tsc2101_init(struct spi_device *spi)
{
u8 io_exp_val;
int r;
if (h3_tsc2101.initialized) {
printk(KERN_ERR "tsc2101: already initialized\n");
return -ENODEV;
}
/* Get the MCLK */
h3_tsc2101.mclk = clk_get(&spi->dev, "mclk");
if (IS_ERR(h3_tsc2101.mclk)) {
dev_err(&spi->dev, "unable to get the clock MCLK\n");
return PTR_ERR(h3_tsc2101.mclk);
}
if ((r = clk_set_rate(h3_tsc2101.mclk, 12000000)) < 0) {
dev_err(&spi->dev, "unable to set rate to the MCLK\n");
goto err;
}
if ((r = read_gpio_expa(&io_exp_val, 0x24))) {
dev_err(&spi->dev, "error reading from I/O EXPANDER\n");
goto err;
}
io_exp_val |= 0x8;
if ((r = write_gpio_expa(io_exp_val, 0x24))) {
dev_err(&spi->dev, "error writing to I/O EXPANDER\n");
goto err;
}
omap_cfg_reg(N14_1610_UWIRE_CS0);
omap_cfg_reg(TSC2101_MUX_MCLK_OFF);
return 0;
err:
clk_put(h3_tsc2101.mclk);
return r;
}
static void h3_tsc2101_cleanup(struct spi_device *spi)
{
clk_put(h3_tsc2101.mclk);
omap_cfg_reg(TSC2101_MUX_MCLK_OFF);
}
static void h3_tsc2101_enable_mclk(struct spi_device *spi)
{
omap_cfg_reg(TSC2101_MUX_MCLK_ON);
clk_enable(h3_tsc2101.mclk);
}
static void h3_tsc2101_disable_mclk(struct spi_device *spi)
{
clk_disable(h3_tsc2101.mclk);
omap_cfg_reg(R10_1610_MCLK_OFF);
}
static struct tsc2101_platform_data h3_tsc2101_platform_data = {
.init = h3_tsc2101_init,
.cleanup = h3_tsc2101_cleanup,
.enable_mclk = h3_tsc2101_enable_mclk,
.disable_mclk = h3_tsc2101_disable_mclk,
};
static struct spi_board_info h3_spi_board_info[] __initdata = {
[0] = {
.modalias = "tsc2101",
.bus_num = 2,
.chip_select = 0,
.max_speed_hz = 16000000,
.platform_data = &h3_tsc2101_platform_data,
},
};
static struct omap_mcbsp_reg_cfg mcbsp_regs = {
.spcr2 = FREE | FRST | GRST | XRST | XINTM(3),
.spcr1 = RINTM(3) | RRST,
......@@ -484,6 +570,8 @@ static void __init h3_init(void)
omap_cfg_reg(V2_1710_GPIO10);
platform_add_devices(devices, ARRAY_SIZE(devices));
spi_register_board_info(h3_spi_board_info,
ARRAY_SIZE(h3_spi_board_info));
omap_board_config = h3_config;
omap_board_config_size = ARRAY_SIZE(h3_config);
omap_serial_init();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment