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