|
@@ -350,10 +350,6 @@ static void setup_i2c_controller(struct nmk_i2c_dev *dev)
|
|
|
|
|
|
i2c_clk = clk_get_rate(dev->clk);
|
|
|
|
|
|
- /* fallback to std. mode if machine has not provided it */
|
|
|
- if (dev->cfg.clk_freq == 0)
|
|
|
- dev->cfg.clk_freq = 100000;
|
|
|
-
|
|
|
/*
|
|
|
* The spec says, in case of std. mode the divider is
|
|
|
* 2 whereas it is 3 for fast and fastplus mode of
|
|
@@ -911,20 +907,32 @@ static const struct i2c_algorithm nmk_i2c_algo = {
|
|
|
.functionality = nmk_i2c_functionality
|
|
|
};
|
|
|
|
|
|
+static struct nmk_i2c_controller u8500_i2c = {
|
|
|
+ /*
|
|
|
+ * Slave data setup time; 250ns, 100ns, and 10ns, which
|
|
|
+ * is 14, 6 and 2 respectively for a 48Mhz i2c clock.
|
|
|
+ */
|
|
|
+ .slsu = 0xe,
|
|
|
+ .tft = 1, /* Tx FIFO threshold */
|
|
|
+ .rft = 8, /* Rx FIFO threshold */
|
|
|
+ .clk_freq = 400000, /* fast mode operation */
|
|
|
+ .timeout = 200, /* Slave response timeout(ms) */
|
|
|
+ .sm = I2C_FREQ_MODE_FAST,
|
|
|
+};
|
|
|
+
|
|
|
static atomic_t adapter_id = ATOMIC_INIT(0);
|
|
|
|
|
|
static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
- struct nmk_i2c_controller *pdata =
|
|
|
- adev->dev.platform_data;
|
|
|
+ struct nmk_i2c_controller *pdata = adev->dev.platform_data;
|
|
|
struct nmk_i2c_dev *dev;
|
|
|
struct i2c_adapter *adap;
|
|
|
|
|
|
- if (!pdata) {
|
|
|
- dev_warn(&adev->dev, "no platform data\n");
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
+ if (!pdata)
|
|
|
+ /* No i2c configuration found, using the default. */
|
|
|
+ pdata = &u8500_i2c;
|
|
|
+
|
|
|
dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL);
|
|
|
if (!dev) {
|
|
|
dev_err(&adev->dev, "cannot allocate memory\n");
|