130feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang/*
230feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang * Copyright (C) 2011 Pengutronix
330feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang * Wolfram Sang <w.sang@pengutronix.de>
430feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang *
530feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang * This program is free software; you can redistribute it and/or modify it under
630feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang * the terms of the GNU General Public License version 2 as published by the
730feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang * Free Software Foundation.
830feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang */
930feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang#include <asm/sizes.h>
1030feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang#include <mach/mx28.h>
1130feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang#include <mach/devices-common.h>
1230feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang
1330feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang#define mxs_i2c_data_entry_single(soc, _id)				\
1430feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	{								\
1530feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		.id = _id,						\
1630feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		.iobase = soc ## _I2C ## _id ## _BASE_ADDR,		\
1730feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		.errirq = soc ## _INT_I2C ## _id ## _ERROR,		\
1830feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		.dmairq = soc ## _INT_I2C ## _id ## _DMA,		\
1930feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	}
2030feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang
2130feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang#define mxs_i2c_data_entry(soc, _id)					\
2230feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	[_id] = mxs_i2c_data_entry_single(soc, _id)
2330feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang
2430feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang#ifdef CONFIG_SOC_IMX28
2501d8cf03db728519ff291aa3519c9543b1203ed7Uwe Kleine-Königconst struct mxs_mxs_i2c_data mx28_mxs_i2c_data[] __initconst = {
2630feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	mxs_i2c_data_entry(MX28, 0),
2730feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	mxs_i2c_data_entry(MX28, 1),
2830feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang};
2930feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang#endif
3030feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang
3101d8cf03db728519ff291aa3519c9543b1203ed7Uwe Kleine-Königstruct platform_device *__init mxs_add_mxs_i2c(
3201d8cf03db728519ff291aa3519c9543b1203ed7Uwe Kleine-König		const struct mxs_mxs_i2c_data *data)
3330feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang{
3430feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	struct resource res[] = {
3530feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		{
3630feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.start = data->iobase,
3730feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.end = data->iobase + SZ_8K - 1,
3830feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.flags = IORESOURCE_MEM,
3930feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		}, {
4030feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.start = data->errirq,
4130feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.end = data->errirq,
4230feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.flags = IORESOURCE_IRQ,
4330feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		}, {
4430feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.start = data->dmairq,
4530feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.end = data->dmairq,
4630feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang			.flags = IORESOURCE_IRQ,
4730feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang		},
4830feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	};
4930feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang
5030feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang	return mxs_add_platform_device("mxs-i2c", data->id, res,
5130feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang					ARRAY_SIZE(res), NULL, 0);
5230feed37f21e00655475d8bf17bcea02221e53d2Wolfram Sang}
53