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: Use snprintf to set adapter names Input: apanel - convert to new i2c binding i2c: Drop I2C_CLASS_CAM_DIGITAL i2c: Drop I2C_CLASS_CAM_ANALOG and I2C_CLASS_SOUND i2c: Drop I2C_CLASS_ALL i2c: Get rid of remaining bus_id access i2c: Replace bus_id with dev_name(), dev_set_name()
This commit is contained in:
Коммит
fa7b906e7f
|
@ -399,8 +399,8 @@ static int __devinit ali1563_probe(struct pci_dev * dev,
|
|||
if ((error = ali1563_setup(dev)))
|
||||
goto exit;
|
||||
ali1563_adapter.dev.parent = &dev->dev;
|
||||
sprintf(ali1563_adapter.name,"SMBus ALi 1563 Adapter @ %04x",
|
||||
ali1563_smba);
|
||||
snprintf(ali1563_adapter.name, sizeof(ali1563_adapter.name),
|
||||
"SMBus ALi 1563 Adapter @ %04x", ali1563_smba);
|
||||
if ((error = i2c_add_adapter(&ali1563_adapter)))
|
||||
goto exit_shutdown;
|
||||
return 0;
|
||||
|
|
|
@ -197,8 +197,8 @@ static int __init amd756_s4882_init(void)
|
|||
for (i = 1; i < 5; i++) {
|
||||
s4882_algo[i] = *(amd756_smbus.algo);
|
||||
s4882_adapter[i] = amd756_smbus;
|
||||
sprintf(s4882_adapter[i].name,
|
||||
"SMBus 8111 adapter (CPU%d)", i-1);
|
||||
snprintf(s4882_adapter[i].name, sizeof(s4882_adapter[i].name),
|
||||
"SMBus 8111 adapter (CPU%d)", i-1);
|
||||
s4882_adapter[i].algo = s4882_algo+i;
|
||||
s4882_adapter[i].dev.parent = amd756_smbus.dev.parent;
|
||||
}
|
||||
|
|
|
@ -380,8 +380,9 @@ static int __devinit amd756_probe(struct pci_dev *pdev,
|
|||
/* set up the sysfs linkage to our parent device */
|
||||
amd756_smbus.dev.parent = &pdev->dev;
|
||||
|
||||
sprintf(amd756_smbus.name, "SMBus %s adapter at %04x",
|
||||
chipname[id->driver_data], amd756_ioport);
|
||||
snprintf(amd756_smbus.name, sizeof(amd756_smbus.name),
|
||||
"SMBus %s adapter at %04x", chipname[id->driver_data],
|
||||
amd756_ioport);
|
||||
|
||||
error = i2c_add_adapter(&amd756_smbus);
|
||||
if (error) {
|
||||
|
|
|
@ -222,7 +222,7 @@ static int __devinit at91_i2c_probe(struct platform_device *pdev)
|
|||
rc = -ENOMEM;
|
||||
goto fail2;
|
||||
}
|
||||
sprintf(adapter->name, "AT91");
|
||||
snprintf(adapter->name, sizeof(adapter->name), "AT91");
|
||||
adapter->algo = &at91_algorithm;
|
||||
adapter->class = I2C_CLASS_HWMON;
|
||||
adapter->dev.parent = &pdev->dev;
|
||||
|
|
|
@ -656,7 +656,7 @@ static int i2c_bfin_twi_probe(struct platform_device *pdev)
|
|||
strlcpy(p_adap->name, pdev->name, sizeof(p_adap->name));
|
||||
p_adap->algo = &bfin_twi_algorithm;
|
||||
p_adap->algo_data = iface;
|
||||
p_adap->class = I2C_CLASS_ALL;
|
||||
p_adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
|
||||
p_adap->dev.parent = &pdev->dev;
|
||||
|
||||
rc = peripheral_request_list(pin_req[pdev->id], "i2c-bfin-twi");
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
/* I801 SMBus address offsets */
|
||||
#define SMBHSTSTS (0 + i801_smba)
|
||||
|
@ -583,6 +583,40 @@ static struct pci_device_id i801_ids[] = {
|
|||
|
||||
MODULE_DEVICE_TABLE (pci, i801_ids);
|
||||
|
||||
#if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
|
||||
static unsigned char apanel_addr;
|
||||
|
||||
/* Scan the system ROM for the signature "FJKEYINF" */
|
||||
static __init const void __iomem *bios_signature(const void __iomem *bios)
|
||||
{
|
||||
ssize_t offset;
|
||||
const unsigned char signature[] = "FJKEYINF";
|
||||
|
||||
for (offset = 0; offset < 0x10000; offset += 0x10) {
|
||||
if (check_signature(bios + offset, signature,
|
||||
sizeof(signature)-1))
|
||||
return bios + offset;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void __init input_apanel_init(void)
|
||||
{
|
||||
void __iomem *bios;
|
||||
const void __iomem *p;
|
||||
|
||||
bios = ioremap(0xF0000, 0x10000); /* Can't fail */
|
||||
p = bios_signature(bios);
|
||||
if (p) {
|
||||
/* just use the first address */
|
||||
apanel_addr = readb(p + 8 + 3) >> 1;
|
||||
}
|
||||
iounmap(bios);
|
||||
}
|
||||
#else
|
||||
static void __init input_apanel_init(void) {}
|
||||
#endif
|
||||
|
||||
static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
unsigned char temp;
|
||||
|
@ -667,6 +701,19 @@ static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id
|
|||
dev_err(&dev->dev, "Failed to add SMBus adapter\n");
|
||||
goto exit_release;
|
||||
}
|
||||
|
||||
/* Register optional slaves */
|
||||
#if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
|
||||
if (apanel_addr) {
|
||||
struct i2c_board_info info;
|
||||
|
||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
info.addr = apanel_addr;
|
||||
strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
|
||||
i2c_new_device(&i801_adapter, &info);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
exit_release:
|
||||
|
@ -717,6 +764,7 @@ static struct pci_driver i801_driver = {
|
|||
|
||||
static int __init i2c_i801_init(void)
|
||||
{
|
||||
input_apanel_init();
|
||||
return pci_register_driver(&i801_driver);
|
||||
}
|
||||
|
||||
|
|
|
@ -1076,10 +1076,10 @@ static int i2c_pxa_probe(struct platform_device *dev)
|
|||
|
||||
#ifdef CONFIG_I2C_PXA_SLAVE
|
||||
printk(KERN_INFO "I2C: %s: PXA I2C adapter, slave address %d\n",
|
||||
i2c->adap.dev.bus_id, i2c->slave_addr);
|
||||
dev_name(&i2c->adap.dev), i2c->slave_addr);
|
||||
#else
|
||||
printk(KERN_INFO "I2C: %s: PXA I2C adapter\n",
|
||||
i2c->adap.dev.bus_id);
|
||||
dev_name(&i2c->adap.dev));
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -906,7 +906,7 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
|
|||
|
||||
platform_set_drvdata(pdev, i2c);
|
||||
|
||||
dev_info(&pdev->dev, "%s: S3C I2C adapter\n", i2c->adap.dev.bus_id);
|
||||
dev_info(&pdev->dev, "%s: S3C I2C adapter\n", dev_name(&i2c->adap.dev));
|
||||
return 0;
|
||||
|
||||
err_cpufreq:
|
||||
|
|
|
@ -475,7 +475,7 @@ static int __devinit sh7760_i2c_probe(struct platform_device *pdev)
|
|||
|
||||
id->adap.nr = pdev->id;
|
||||
id->adap.algo = &sh7760_i2c_algo;
|
||||
id->adap.class = I2C_CLASS_ALL;
|
||||
id->adap.class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
|
||||
id->adap.retries = 3;
|
||||
id->adap.algo_data = id;
|
||||
id->adap.dev.parent = &pdev->dev;
|
||||
|
|
|
@ -500,7 +500,7 @@ static int sh_mobile_i2c_hook_irqs(struct platform_device *dev, int hook)
|
|||
while ((res = platform_get_resource(dev, IORESOURCE_IRQ, k))) {
|
||||
for (n = res->start; hook && n <= res->end; n++) {
|
||||
if (request_irq(n, sh_mobile_i2c_isr, IRQF_DISABLED,
|
||||
dev->dev.bus_id, dev))
|
||||
dev_name(&dev->dev), dev))
|
||||
goto rollback;
|
||||
}
|
||||
k++;
|
||||
|
|
|
@ -389,8 +389,8 @@ static int __devinit sis5595_probe(struct pci_dev *dev, const struct pci_device_
|
|||
/* set up the sysfs linkage to our parent device */
|
||||
sis5595_adapter.dev.parent = &dev->dev;
|
||||
|
||||
sprintf(sis5595_adapter.name, "SMBus SIS5595 adapter at %04x",
|
||||
sis5595_base + SMB_INDEX);
|
||||
snprintf(sis5595_adapter.name, sizeof(sis5595_adapter.name),
|
||||
"SMBus SIS5595 adapter at %04x", sis5595_base + SMB_INDEX);
|
||||
err = i2c_add_adapter(&sis5595_adapter);
|
||||
if (err) {
|
||||
release_region(sis5595_base + SMB_INDEX, 2);
|
||||
|
|
|
@ -487,8 +487,8 @@ static int __devinit sis630_probe(struct pci_dev *dev, const struct pci_device_i
|
|||
/* set up the sysfs linkage to our parent device */
|
||||
sis630_adapter.dev.parent = &dev->dev;
|
||||
|
||||
sprintf(sis630_adapter.name, "SMBus SIS630 adapter at %04x",
|
||||
acpi_base + SMB_STS);
|
||||
snprintf(sis630_adapter.name, sizeof(sis630_adapter.name),
|
||||
"SMBus SIS630 adapter at %04x", acpi_base + SMB_STS);
|
||||
|
||||
return i2c_add_adapter(&sis630_adapter);
|
||||
}
|
||||
|
|
|
@ -459,7 +459,7 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
|
|||
pr_debug("I2C adapter driver [%s] forgot to specify "
|
||||
"physical device\n", adap->name);
|
||||
}
|
||||
sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
|
||||
dev_set_name(&adap->dev, "i2c-%d", adap->nr);
|
||||
adap->dev.release = &i2c_adapter_dev_release;
|
||||
adap->dev.class = &i2c_adapter_class;
|
||||
res = device_register(&adap->dev);
|
||||
|
@ -845,8 +845,8 @@ int i2c_attach_client(struct i2c_client *client)
|
|||
} else
|
||||
client->dev.release = i2c_client_dev_release;
|
||||
|
||||
snprintf(&client->dev.bus_id[0], sizeof(client->dev.bus_id),
|
||||
"%d-%04x", i2c_adapter_id(adapter), client->addr);
|
||||
dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adapter),
|
||||
client->addr);
|
||||
res = device_register(&client->dev);
|
||||
if (res)
|
||||
goto out_err;
|
||||
|
@ -856,7 +856,7 @@ int i2c_attach_client(struct i2c_client *client)
|
|||
mutex_unlock(&adapter->clist_lock);
|
||||
|
||||
dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
|
||||
client->name, client->dev.bus_id);
|
||||
client->name, dev_name(&client->dev));
|
||||
|
||||
if (adapter->client_register) {
|
||||
if (adapter->client_register(client)) {
|
||||
|
|
|
@ -57,7 +57,7 @@ static enum apanel_chip device_chip[APANEL_DEV_MAX];
|
|||
|
||||
struct apanel {
|
||||
struct input_polled_dev *ipdev;
|
||||
struct i2c_client client;
|
||||
struct i2c_client *client;
|
||||
unsigned short keymap[MAX_PANEL_KEYS];
|
||||
u16 nkeys;
|
||||
u16 led_bits;
|
||||
|
@ -66,16 +66,7 @@ struct apanel {
|
|||
};
|
||||
|
||||
|
||||
static int apanel_probe(struct i2c_adapter *, int, int);
|
||||
|
||||
/* for now, we only support one address */
|
||||
static unsigned short normal_i2c[] = {0, I2C_CLIENT_END};
|
||||
static unsigned short ignore = I2C_CLIENT_END;
|
||||
static struct i2c_client_address_data addr_data = {
|
||||
.normal_i2c = normal_i2c,
|
||||
.probe = &ignore,
|
||||
.ignore = &ignore,
|
||||
};
|
||||
static int apanel_probe(struct i2c_client *, const struct i2c_device_id *);
|
||||
|
||||
static void report_key(struct input_dev *input, unsigned keycode)
|
||||
{
|
||||
|
@ -103,12 +94,12 @@ static void apanel_poll(struct input_polled_dev *ipdev)
|
|||
s32 data;
|
||||
int i;
|
||||
|
||||
data = i2c_smbus_read_word_data(&ap->client, cmd);
|
||||
data = i2c_smbus_read_word_data(ap->client, cmd);
|
||||
if (data < 0)
|
||||
return; /* ignore errors (due to ACPI??) */
|
||||
|
||||
/* write back to clear latch */
|
||||
i2c_smbus_write_word_data(&ap->client, cmd, 0);
|
||||
i2c_smbus_write_word_data(ap->client, cmd, 0);
|
||||
|
||||
if (!data)
|
||||
return;
|
||||
|
@ -124,7 +115,7 @@ static void led_update(struct work_struct *work)
|
|||
{
|
||||
struct apanel *ap = container_of(work, struct apanel, led_work);
|
||||
|
||||
i2c_smbus_write_word_data(&ap->client, 0x10, ap->led_bits);
|
||||
i2c_smbus_write_word_data(ap->client, 0x10, ap->led_bits);
|
||||
}
|
||||
|
||||
static void mail_led_set(struct led_classdev *led,
|
||||
|
@ -140,7 +131,7 @@ static void mail_led_set(struct led_classdev *led,
|
|||
schedule_work(&ap->led_work);
|
||||
}
|
||||
|
||||
static int apanel_detach_client(struct i2c_client *client)
|
||||
static int apanel_remove(struct i2c_client *client)
|
||||
{
|
||||
struct apanel *ap = i2c_get_clientdata(client);
|
||||
|
||||
|
@ -148,43 +139,33 @@ static int apanel_detach_client(struct i2c_client *client)
|
|||
led_classdev_unregister(&ap->mail_led);
|
||||
|
||||
input_unregister_polled_device(ap->ipdev);
|
||||
i2c_detach_client(&ap->client);
|
||||
input_free_polled_device(ap->ipdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Function is invoked for every i2c adapter. */
|
||||
static int apanel_attach_adapter(struct i2c_adapter *adap)
|
||||
{
|
||||
dev_dbg(&adap->dev, APANEL ": attach adapter id=%d\n", adap->id);
|
||||
|
||||
/* Our device is connected only to i801 on laptop */
|
||||
if (adap->id != I2C_HW_SMBUS_I801)
|
||||
return -ENODEV;
|
||||
|
||||
return i2c_probe(adap, &addr_data, apanel_probe);
|
||||
}
|
||||
|
||||
static void apanel_shutdown(struct i2c_client *client)
|
||||
{
|
||||
apanel_detach_client(client);
|
||||
apanel_remove(client);
|
||||
}
|
||||
|
||||
static struct i2c_device_id apanel_id[] = {
|
||||
{ "fujitsu_apanel", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, apanel_id);
|
||||
|
||||
static struct i2c_driver apanel_driver = {
|
||||
.driver = {
|
||||
.name = APANEL,
|
||||
},
|
||||
.attach_adapter = &apanel_attach_adapter,
|
||||
.detach_client = &apanel_detach_client,
|
||||
.probe = &apanel_probe,
|
||||
.remove = &apanel_remove,
|
||||
.shutdown = &apanel_shutdown,
|
||||
.id_table = apanel_id,
|
||||
};
|
||||
|
||||
static struct apanel apanel = {
|
||||
.client = {
|
||||
.driver = &apanel_driver,
|
||||
.name = APANEL,
|
||||
},
|
||||
.keymap = {
|
||||
[0] = KEY_MAIL,
|
||||
[1] = KEY_WWW,
|
||||
|
@ -204,7 +185,8 @@ static struct apanel apanel = {
|
|||
};
|
||||
|
||||
/* NB: Only one panel on the i2c. */
|
||||
static int apanel_probe(struct i2c_adapter *bus, int address, int kind)
|
||||
static int apanel_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
struct apanel *ap;
|
||||
struct input_polled_dev *ipdev;
|
||||
|
@ -212,9 +194,6 @@ static int apanel_probe(struct i2c_adapter *bus, int address, int kind)
|
|||
u8 cmd = device_chip[APANEL_DEV_APPBTN] == CHIP_OZ992C ? 0 : 8;
|
||||
int i, err = -ENOMEM;
|
||||
|
||||
dev_dbg(&bus->dev, APANEL ": probe adapter %p addr %d kind %d\n",
|
||||
bus, address, kind);
|
||||
|
||||
ap = &apanel;
|
||||
|
||||
ipdev = input_allocate_polled_device();
|
||||
|
@ -222,18 +201,13 @@ static int apanel_probe(struct i2c_adapter *bus, int address, int kind)
|
|||
goto out1;
|
||||
|
||||
ap->ipdev = ipdev;
|
||||
ap->client.adapter = bus;
|
||||
ap->client.addr = address;
|
||||
ap->client = client;
|
||||
|
||||
i2c_set_clientdata(&ap->client, ap);
|
||||
i2c_set_clientdata(client, ap);
|
||||
|
||||
err = i2c_attach_client(&ap->client);
|
||||
if (err)
|
||||
goto out2;
|
||||
|
||||
err = i2c_smbus_write_word_data(&ap->client, cmd, 0);
|
||||
err = i2c_smbus_write_word_data(client, cmd, 0);
|
||||
if (err) {
|
||||
dev_warn(&ap->client.dev, APANEL ": smbus write error %d\n",
|
||||
dev_warn(&client->dev, APANEL ": smbus write error %d\n",
|
||||
err);
|
||||
goto out3;
|
||||
}
|
||||
|
@ -246,7 +220,7 @@ static int apanel_probe(struct i2c_adapter *bus, int address, int kind)
|
|||
idev->name = APANEL_NAME " buttons";
|
||||
idev->phys = "apanel/input0";
|
||||
idev->id.bustype = BUS_HOST;
|
||||
idev->dev.parent = &ap->client.dev;
|
||||
idev->dev.parent = &client->dev;
|
||||
|
||||
set_bit(EV_KEY, idev->evbit);
|
||||
|
||||
|
@ -264,7 +238,7 @@ static int apanel_probe(struct i2c_adapter *bus, int address, int kind)
|
|||
|
||||
INIT_WORK(&ap->led_work, led_update);
|
||||
if (device_chip[APANEL_DEV_LED] != CHIP_NONE) {
|
||||
err = led_classdev_register(&ap->client.dev, &ap->mail_led);
|
||||
err = led_classdev_register(&client->dev, &ap->mail_led);
|
||||
if (err)
|
||||
goto out4;
|
||||
}
|
||||
|
@ -273,8 +247,6 @@ static int apanel_probe(struct i2c_adapter *bus, int address, int kind)
|
|||
out4:
|
||||
input_unregister_polled_device(ipdev);
|
||||
out3:
|
||||
i2c_detach_client(&ap->client);
|
||||
out2:
|
||||
input_free_polled_device(ipdev);
|
||||
out1:
|
||||
return err;
|
||||
|
@ -301,6 +273,7 @@ static int __init apanel_init(void)
|
|||
void __iomem *bios;
|
||||
const void __iomem *p;
|
||||
u8 devno;
|
||||
unsigned char i2c_addr;
|
||||
int found = 0;
|
||||
|
||||
bios = ioremap(0xF0000, 0x10000); /* Can't fail */
|
||||
|
@ -313,7 +286,7 @@ static int __init apanel_init(void)
|
|||
|
||||
/* just use the first address */
|
||||
p += 8;
|
||||
normal_i2c[0] = readb(p+3) >> 1;
|
||||
i2c_addr = readb(p + 3) >> 1;
|
||||
|
||||
for ( ; (devno = readb(p)) & 0x7f; p += 4) {
|
||||
unsigned char method, slave, chip;
|
||||
|
@ -322,7 +295,7 @@ static int __init apanel_init(void)
|
|||
chip = readb(p + 2);
|
||||
slave = readb(p + 3) >> 1;
|
||||
|
||||
if (slave != normal_i2c[0]) {
|
||||
if (slave != i2c_addr) {
|
||||
pr_notice(APANEL ": only one SMBus slave "
|
||||
"address supported, skiping device...\n");
|
||||
continue;
|
||||
|
|
|
@ -569,7 +569,6 @@ static int cafe_smbus_setup(struct cafe_camera *cam)
|
|||
|
||||
cafe_smbus_enable_irq(cam);
|
||||
adap->id = I2C_HW_SMBUS_CAFE;
|
||||
adap->class = I2C_CLASS_CAM_DIGITAL;
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->client_register = cafe_smbus_attach;
|
||||
adap->client_unregister = cafe_smbus_detach;
|
||||
|
|
|
@ -1347,7 +1347,6 @@ static struct i2c_driver ov7670_driver = {
|
|||
.name = "ov7670",
|
||||
},
|
||||
.id = I2C_DRIVERID_OV7670,
|
||||
.class = I2C_CLASS_CAM_DIGITAL,
|
||||
.attach_adapter = ov7670_attach,
|
||||
.detach_client = ov7670_detach,
|
||||
.command = ov7670_command,
|
||||
|
|
|
@ -405,7 +405,6 @@ static struct i2c_driver driver = {
|
|||
.name = "ovcamchip",
|
||||
},
|
||||
.id = I2C_DRIVERID_OVCAMCHIP,
|
||||
.class = I2C_CLASS_CAM_DIGITAL,
|
||||
.attach_adapter = ovcamchip_attach,
|
||||
.detach_client = ovcamchip_detach,
|
||||
.command = ovcamchip_command,
|
||||
|
|
|
@ -1553,7 +1553,6 @@ static int w9968cf_i2c_init(struct w9968cf_device* cam)
|
|||
|
||||
static struct i2c_adapter adap = {
|
||||
.id = I2C_HW_SMBUS_W9968CF,
|
||||
.class = I2C_CLASS_CAM_DIGITAL,
|
||||
.owner = THIS_MODULE,
|
||||
.client_register = w9968cf_i2c_attach_inform,
|
||||
.client_unregister = w9968cf_i2c_detach_inform,
|
||||
|
|
|
@ -393,11 +393,7 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
|
|||
#define I2C_CLASS_TV_ANALOG (1<<1) /* bttv + friends */
|
||||
#define I2C_CLASS_TV_DIGITAL (1<<2) /* dvb cards */
|
||||
#define I2C_CLASS_DDC (1<<3) /* DDC bus on graphics adapters */
|
||||
#define I2C_CLASS_CAM_ANALOG (1<<4) /* camera with analog CCD */
|
||||
#define I2C_CLASS_CAM_DIGITAL (1<<5) /* most webcams */
|
||||
#define I2C_CLASS_SOUND (1<<6) /* sound devices */
|
||||
#define I2C_CLASS_SPD (1<<7) /* SPD EEPROMs and similar */
|
||||
#define I2C_CLASS_ALL (UINT_MAX) /* all of the above */
|
||||
|
||||
/* i2c_client_address_data is the struct for holding default client
|
||||
* addresses for a driver and for the parameters supplied on the
|
||||
|
|
Загрузка…
Ссылка в новой задаче