Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

i2c: Let bus drivers add SPD to their class

Let general purpose I2C/SMBus bus drivers add SPD to their class. Once
this is done, we will be able to tell the eeprom driver to only probe
for SPD EEPROMs and similar on these buses.

Note that I took a conservative approach here, adding I2C_CLASS_SPD to
many drivers that have no idea whether they can host SPD EEPROMs or not.
This is to make sure that the eeprom driver doesn't stop probing buses
where SPD EEPROMs or equivalent live.

So, bus driver maintainers and users should feel free to remove the SPD
class from drivers those buses never have SPD EEPROMs or they don't
want the eeprom driver to bind to them. Likewise, feel free to add the
SPD class to any bus driver I might have missed.

Signed-off-by: Jean Delvare <khali@linux-fr.org>

authored by

Jean Delvare and committed by
Jean Delvare
3401b2ff c1b6b4f2

+31 -30
+1 -1
drivers/i2c/busses/i2c-ali1535.c
··· 473 473 static struct i2c_adapter ali1535_adapter = { 474 474 .owner = THIS_MODULE, 475 475 .id = I2C_HW_SMBUS_ALI1535, 476 - .class = I2C_CLASS_HWMON, 476 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 477 477 .algo = &smbus_algorithm, 478 478 }; 479 479
+1 -1
drivers/i2c/busses/i2c-ali1563.c
··· 382 382 static struct i2c_adapter ali1563_adapter = { 383 383 .owner = THIS_MODULE, 384 384 .id = I2C_HW_SMBUS_ALI1563, 385 - .class = I2C_CLASS_HWMON, 385 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 386 386 .algo = &ali1563_algorithm, 387 387 }; 388 388
+1 -1
drivers/i2c/busses/i2c-ali15x3.c
··· 471 471 static struct i2c_adapter ali15x3_adapter = { 472 472 .owner = THIS_MODULE, 473 473 .id = I2C_HW_SMBUS_ALI15X3, 474 - .class = I2C_CLASS_HWMON, 474 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 475 475 .algo = &smbus_algorithm, 476 476 }; 477 477
+1 -1
drivers/i2c/busses/i2c-amd756.c
··· 301 301 struct i2c_adapter amd756_smbus = { 302 302 .owner = THIS_MODULE, 303 303 .id = I2C_HW_SMBUS_AMD756, 304 - .class = I2C_CLASS_HWMON, 304 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 305 305 .algo = &smbus_algorithm, 306 306 }; 307 307
+1 -1
drivers/i2c/busses/i2c-amd8111.c
··· 383 383 snprintf(smbus->adapter.name, sizeof(smbus->adapter.name), 384 384 "SMBus2 AMD8111 adapter at %04x", smbus->base); 385 385 smbus->adapter.id = I2C_HW_SMBUS_AMD8111; 386 - smbus->adapter.class = I2C_CLASS_HWMON; 386 + smbus->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 387 387 smbus->adapter.algo = &smbus_algorithm; 388 388 smbus->adapter.algo_data = smbus; 389 389
+1 -1
drivers/i2c/busses/i2c-cpm.c
··· 423 423 .owner = THIS_MODULE, 424 424 .name = "i2c-cpm", 425 425 .algo = &cpm_i2c_algo, 426 - .class = I2C_CLASS_HWMON, 426 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 427 427 }; 428 428 429 429 static int __devinit cpm_i2c_setup(struct cpm_i2c *cpm)
+1 -1
drivers/i2c/busses/i2c-elektor.c
··· 202 202 203 203 static struct i2c_adapter pcf_isa_ops = { 204 204 .owner = THIS_MODULE, 205 - .class = I2C_CLASS_HWMON, 205 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 206 206 .id = I2C_HW_P_ELEK, 207 207 .algo_data = &pcf_isa_data, 208 208 .name = "i2c-elektor",
+1 -1
drivers/i2c/busses/i2c-gpio.c
··· 140 140 adap->owner = THIS_MODULE; 141 141 snprintf(adap->name, sizeof(adap->name), "i2c-gpio%d", pdev->id); 142 142 adap->algo_data = bit_data; 143 - adap->class = I2C_CLASS_HWMON; 143 + adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 144 144 adap->dev.parent = &pdev->dev; 145 145 146 146 /*
+1 -1
drivers/i2c/busses/i2c-i801.c
··· 573 573 static struct i2c_adapter i801_adapter = { 574 574 .owner = THIS_MODULE, 575 575 .id = I2C_HW_SMBUS_I801, 576 - .class = I2C_CLASS_HWMON, 576 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 577 577 .algo = &smbus_algorithm, 578 578 }; 579 579
+2 -2
drivers/i2c/busses/i2c-ibm_iic.c
··· 740 740 strcpy(adap->name, "IBM IIC"); 741 741 i2c_set_adapdata(adap, dev); 742 742 adap->id = I2C_HW_OCP; 743 - adap->class = I2C_CLASS_HWMON; 743 + adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 744 744 adap->algo = &iic_algo; 745 745 adap->client_register = NULL; 746 746 adap->client_unregister = NULL; ··· 934 934 strlcpy(adap->name, "IBM IIC", sizeof(adap->name)); 935 935 i2c_set_adapdata(adap, dev); 936 936 adap->id = I2C_HW_OCP; 937 - adap->class = I2C_CLASS_HWMON; 937 + adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 938 938 adap->algo = &iic_algo; 939 939 adap->timeout = 1; 940 940 adap->nr = dev->idx;
+1 -1
drivers/i2c/busses/i2c-iop3xx.c
··· 482 482 memcpy(new_adapter->name, pdev->name, strlen(pdev->name)); 483 483 new_adapter->id = I2C_HW_IOP3XX; 484 484 new_adapter->owner = THIS_MODULE; 485 - new_adapter->class = I2C_CLASS_HWMON; 485 + new_adapter->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 486 486 new_adapter->dev.parent = &pdev->dev; 487 487 new_adapter->nr = pdev->id; 488 488
+1 -1
drivers/i2c/busses/i2c-isch.c
··· 251 251 252 252 static struct i2c_adapter sch_adapter = { 253 253 .owner = THIS_MODULE, 254 - .class = I2C_CLASS_HWMON, 254 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 255 255 .algo = &smbus_algorithm, 256 256 }; 257 257
+1 -1
drivers/i2c/busses/i2c-mpc.c
··· 311 311 .name = "MPC adapter", 312 312 .id = I2C_HW_MPC107, 313 313 .algo = &mpc_algo, 314 - .class = I2C_CLASS_HWMON, 314 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 315 315 .timeout = 1, 316 316 }; 317 317
+1 -1
drivers/i2c/busses/i2c-mv64xxx.c
··· 530 530 drv_data->adapter.id = I2C_HW_MV64XXX; 531 531 drv_data->adapter.algo = &mv64xxx_i2c_algo; 532 532 drv_data->adapter.owner = THIS_MODULE; 533 - drv_data->adapter.class = I2C_CLASS_HWMON; 533 + drv_data->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 534 534 drv_data->adapter.timeout = pdata->timeout; 535 535 drv_data->adapter.nr = pd->id; 536 536 platform_set_drvdata(pd, drv_data);
+1 -1
drivers/i2c/busses/i2c-nforce2.c
··· 350 350 } 351 351 smbus->adapter.owner = THIS_MODULE; 352 352 smbus->adapter.id = I2C_HW_SMBUS_NFORCE2; 353 - smbus->adapter.class = I2C_CLASS_HWMON; 353 + smbus->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 354 354 smbus->adapter.algo = &smbus_algorithm; 355 355 smbus->adapter.algo_data = smbus; 356 356 smbus->adapter.dev.parent = &dev->dev;
+1 -1
drivers/i2c/busses/i2c-ocores.c
··· 205 205 static struct i2c_adapter ocores_adapter = { 206 206 .owner = THIS_MODULE, 207 207 .name = "i2c-ocores", 208 - .class = I2C_CLASS_HWMON, 208 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 209 209 .algo = &ocores_algorithm, 210 210 }; 211 211
+1 -1
drivers/i2c/busses/i2c-pasemi.c
··· 365 365 smbus->adapter.owner = THIS_MODULE; 366 366 snprintf(smbus->adapter.name, sizeof(smbus->adapter.name), 367 367 "PA Semi SMBus adapter at 0x%lx", smbus->base); 368 - smbus->adapter.class = I2C_CLASS_HWMON; 368 + smbus->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 369 369 smbus->adapter.algo = &smbus_algorithm; 370 370 smbus->adapter.algo_data = smbus; 371 371 smbus->adapter.nr = PCI_FUNC(dev->devfn);
+1 -1
drivers/i2c/busses/i2c-piix4.c
··· 402 402 static struct i2c_adapter piix4_adapter = { 403 403 .owner = THIS_MODULE, 404 404 .id = I2C_HW_SMBUS_PIIX4, 405 - .class = I2C_CLASS_HWMON, 405 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 406 406 .algo = &smbus_algorithm, 407 407 }; 408 408
+1 -1
drivers/i2c/busses/i2c-pmcmsp.c
··· 622 622 623 623 static struct i2c_adapter pmcmsptwi_adapter = { 624 624 .owner = THIS_MODULE, 625 - .class = I2C_CLASS_HWMON, 625 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 626 626 .algo = &pmcmsptwi_algo, 627 627 .name = DRV_NAME, 628 628 };
+1 -1
drivers/i2c/busses/i2c-s3c2410.c
··· 590 590 .owner = THIS_MODULE, 591 591 .algo = &s3c24xx_i2c_algorithm, 592 592 .retries = 2, 593 - .class = I2C_CLASS_HWMON, 593 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 594 594 }, 595 595 }; 596 596
+2 -2
drivers/i2c/busses/i2c-sibyte.c
··· 156 156 { 157 157 .owner = THIS_MODULE, 158 158 .id = I2C_HW_SIBYTE, 159 - .class = I2C_CLASS_HWMON, 159 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 160 160 .algo = NULL, 161 161 .algo_data = &sibyte_board_data[0], 162 162 .name = "SiByte SMBus 0", ··· 164 164 { 165 165 .owner = THIS_MODULE, 166 166 .id = I2C_HW_SIBYTE, 167 - .class = I2C_CLASS_HWMON, 167 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 168 168 .algo = NULL, 169 169 .algo_data = &sibyte_board_data[1], 170 170 .name = "SiByte SMBus 1",
+1 -1
drivers/i2c/busses/i2c-sis5595.c
··· 362 362 static struct i2c_adapter sis5595_adapter = { 363 363 .owner = THIS_MODULE, 364 364 .id = I2C_HW_SMBUS_SIS5595, 365 - .class = I2C_CLASS_HWMON, 365 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 366 366 .algo = &smbus_algorithm, 367 367 }; 368 368
+1 -1
drivers/i2c/busses/i2c-sis630.c
··· 462 462 static struct i2c_adapter sis630_adapter = { 463 463 .owner = THIS_MODULE, 464 464 .id = I2C_HW_SMBUS_SIS630, 465 - .class = I2C_CLASS_HWMON, 465 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 466 466 .algo = &smbus_algorithm, 467 467 }; 468 468
+1 -1
drivers/i2c/busses/i2c-sis96x.c
··· 244 244 static struct i2c_adapter sis96x_adapter = { 245 245 .owner = THIS_MODULE, 246 246 .id = I2C_HW_SMBUS_SIS96X, 247 - .class = I2C_CLASS_HWMON, 247 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 248 248 .algo = &smbus_algorithm, 249 249 }; 250 250
+1 -1
drivers/i2c/busses/i2c-stub.c
··· 140 140 141 141 static struct i2c_adapter stub_adapter = { 142 142 .owner = THIS_MODULE, 143 - .class = I2C_CLASS_HWMON, 143 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 144 144 .algo = &smbus_algorithm, 145 145 .name = "SMBus stub driver", 146 146 };
+1 -1
drivers/i2c/busses/i2c-via.c
··· 87 87 static struct i2c_adapter vt586b_adapter = { 88 88 .owner = THIS_MODULE, 89 89 .id = I2C_HW_B_VIA, 90 - .class = I2C_CLASS_HWMON, 90 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 91 91 .name = "VIA i2c", 92 92 .algo_data = &bit_data, 93 93 };
+1 -1
drivers/i2c/busses/i2c-viapro.c
··· 311 311 static struct i2c_adapter vt596_adapter = { 312 312 .owner = THIS_MODULE, 313 313 .id = I2C_HW_SMBUS_VIA2, 314 - .class = I2C_CLASS_HWMON, 314 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 315 315 .algo = &smbus_algorithm, 316 316 }; 317 317
+1 -1
drivers/i2c/busses/scx200_acb.c
··· 442 442 adapter->owner = THIS_MODULE; 443 443 adapter->id = I2C_HW_SMBUS_SCX200; 444 444 adapter->algo = &scx200_acb_algorithm; 445 - adapter->class = I2C_CLASS_HWMON; 445 + adapter->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 446 446 adapter->dev.parent = dev; 447 447 448 448 mutex_init(&iface->mutex);
+1
include/linux/i2c.h
··· 353 353 #define I2C_CLASS_CAM_ANALOG (1<<4) /* camera with analog CCD */ 354 354 #define I2C_CLASS_CAM_DIGITAL (1<<5) /* most webcams */ 355 355 #define I2C_CLASS_SOUND (1<<6) /* sound devices */ 356 + #define I2C_CLASS_SPD (1<<7) /* SPD EEPROMs and similar */ 356 357 #define I2C_CLASS_ALL (UINT_MAX) /* all of the above */ 357 358 358 359 /* i2c_client_address_data is the struct for holding default client