Merge branch 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6
* 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6: i2c/isp1301_omap: Build fix i2c: Add missing spaces in split log messages i2c-gpio: Initialize adapter class i2c: Delete an outdated piece of documentation
This commit is contained in:
commit
02ec96be2b
5 changed files with 11 additions and 47 deletions
|
@ -1,5 +1,3 @@
|
||||||
This is an explanation of what i2c is, and what is supported in this package.
|
|
||||||
|
|
||||||
I2C and SMBus
|
I2C and SMBus
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
@ -33,52 +31,17 @@ When we talk about I2C, we use the following terms:
|
||||||
Client
|
Client
|
||||||
|
|
||||||
An Algorithm driver contains general code that can be used for a whole class
|
An Algorithm driver contains general code that can be used for a whole class
|
||||||
of I2C adapters. Each specific adapter driver depends on one algorithm
|
of I2C adapters. Each specific adapter driver either depends on one algorithm
|
||||||
driver.
|
driver, or includes its own implementation.
|
||||||
|
|
||||||
A Driver driver (yes, this sounds ridiculous, sorry) contains the general
|
A Driver driver (yes, this sounds ridiculous, sorry) contains the general
|
||||||
code to access some type of device. Each detected device gets its own
|
code to access some type of device. Each detected device gets its own
|
||||||
data in the Client structure. Usually, Driver and Client are more closely
|
data in the Client structure. Usually, Driver and Client are more closely
|
||||||
integrated than Algorithm and Adapter.
|
integrated than Algorithm and Adapter.
|
||||||
|
|
||||||
For a given configuration, you will need a driver for your I2C bus (usually
|
For a given configuration, you will need a driver for your I2C bus, and
|
||||||
a separate Adapter and Algorithm driver), and drivers for your I2C devices
|
drivers for your I2C devices (usually one driver for each device).
|
||||||
(usually one driver for each device). There are no I2C device drivers
|
|
||||||
in this package. See the lm_sensors project http://www.lm-sensors.nu
|
|
||||||
for device drivers.
|
|
||||||
|
|
||||||
At this time, Linux only operates I2C (or SMBus) in master mode; you can't
|
At this time, Linux only operates I2C (or SMBus) in master mode; you can't
|
||||||
use these APIs to make a Linux system behave as a slave/device, either to
|
use these APIs to make a Linux system behave as a slave/device, either to
|
||||||
speak a custom protocol or to emulate some other device.
|
speak a custom protocol or to emulate some other device.
|
||||||
|
|
||||||
|
|
||||||
Included Bus Drivers
|
|
||||||
====================
|
|
||||||
Note that only stable drivers are patched into the kernel by 'mkpatch'.
|
|
||||||
|
|
||||||
|
|
||||||
Base modules
|
|
||||||
------------
|
|
||||||
|
|
||||||
i2c-core: The basic I2C code, including the /proc/bus/i2c* interface
|
|
||||||
i2c-dev: The /dev/i2c-* interface
|
|
||||||
i2c-proc: The /proc/sys/dev/sensors interface for device (client) drivers
|
|
||||||
|
|
||||||
Algorithm drivers
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
i2c-algo-bit: A bit-banging algorithm
|
|
||||||
i2c-algo-pcf: A PCF 8584 style algorithm
|
|
||||||
i2c-algo-ibm_ocp: An algorithm for the I2C device in IBM 4xx processors (NOT BUILT BY DEFAULT)
|
|
||||||
|
|
||||||
Adapter drivers
|
|
||||||
---------------
|
|
||||||
|
|
||||||
i2c-elektor: Elektor ISA card (uses i2c-algo-pcf)
|
|
||||||
i2c-elv: ELV parallel port adapter (uses i2c-algo-bit)
|
|
||||||
i2c-pcf-epp: PCF8584 on a EPP parallel port (uses i2c-algo-pcf) (NOT mkpatched)
|
|
||||||
i2c-philips-par: Philips style parallel port adapter (uses i2c-algo-bit)
|
|
||||||
i2c-adap-ibm_ocp: IBM 4xx processor I2C device (uses i2c-algo-ibm_ocp) (NOT BUILT BY DEFAULT)
|
|
||||||
i2c-pport: Primitive parallel port adapter (uses i2c-algo-bit)
|
|
||||||
i2c-velleman: Velleman K8000 parallel port adapter (uses i2c-algo-bit)
|
|
||||||
|
|
||||||
|
|
|
@ -404,7 +404,7 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void *dev_id)
|
||||||
DAVINCI_I2C_STR_REG,
|
DAVINCI_I2C_STR_REG,
|
||||||
w);
|
w);
|
||||||
} else
|
} else
|
||||||
dev_err(dev->dev, "RDR IRQ while no"
|
dev_err(dev->dev, "RDR IRQ while no "
|
||||||
"data requested\n");
|
"data requested\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -423,7 +423,7 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void *dev_id)
|
||||||
DAVINCI_I2C_IMR_REG,
|
DAVINCI_I2C_IMR_REG,
|
||||||
w);
|
w);
|
||||||
} else
|
} else
|
||||||
dev_err(dev->dev, "TDR IRQ while no data to"
|
dev_err(dev->dev, "TDR IRQ while no data to "
|
||||||
"send\n");
|
"send\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,7 @@ static int __init i2c_gpio_probe(struct platform_device *pdev)
|
||||||
adap->owner = THIS_MODULE;
|
adap->owner = THIS_MODULE;
|
||||||
snprintf(adap->name, sizeof(adap->name), "i2c-gpio%d", pdev->id);
|
snprintf(adap->name, sizeof(adap->name), "i2c-gpio%d", pdev->id);
|
||||||
adap->algo_data = bit_data;
|
adap->algo_data = bit_data;
|
||||||
|
adap->class = I2C_CLASS_HWMON;
|
||||||
adap->dev.parent = &pdev->dev;
|
adap->dev.parent = &pdev->dev;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -203,7 +203,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
|
||||||
while (!(omap_i2c_read_reg(dev, OMAP_I2C_SYSS_REG) &
|
while (!(omap_i2c_read_reg(dev, OMAP_I2C_SYSS_REG) &
|
||||||
OMAP_I2C_SYSS_RDONE)) {
|
OMAP_I2C_SYSS_RDONE)) {
|
||||||
if (time_after(jiffies, timeout)) {
|
if (time_after(jiffies, timeout)) {
|
||||||
dev_warn(dev->dev, "timeout waiting"
|
dev_warn(dev->dev, "timeout waiting "
|
||||||
"for controller reset\n");
|
"for controller reset\n");
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
@ -483,7 +483,7 @@ omap_i2c_isr(int this_irq, void *dev_id)
|
||||||
dev->buf_len--;
|
dev->buf_len--;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
dev_err(dev->dev, "RRDY IRQ while no data"
|
dev_err(dev->dev, "RRDY IRQ while no data "
|
||||||
"requested\n");
|
"requested\n");
|
||||||
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RRDY);
|
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RRDY);
|
||||||
continue;
|
continue;
|
||||||
|
@ -498,7 +498,7 @@ omap_i2c_isr(int this_irq, void *dev_id)
|
||||||
dev->buf_len--;
|
dev->buf_len--;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
dev_err(dev->dev, "XRDY IRQ while no"
|
dev_err(dev->dev, "XRDY IRQ while no "
|
||||||
"data to send\n");
|
"data to send\n");
|
||||||
omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
|
omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
|
||||||
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY);
|
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY);
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/usb/ch9.h>
|
#include <linux/usb/ch9.h>
|
||||||
#include <linux/usb_gadget.h>
|
#include <linux/usb/gadget.h>
|
||||||
#include <linux/usb.h>
|
#include <linux/usb.h>
|
||||||
#include <linux/usb/otg.h>
|
#include <linux/usb/otg.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
|
|
Loading…
Add table
Reference in a new issue