*      PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547,
  *      PCA9548, PCA9846, PCA9847, PCA9848 and PCA9849.
  *
+ * It's also compatible to Maxims MAX735x I2C switch chips, which are controlled
+ * as the NXP PCA9548 and the MAX736x chips that act like the PCA9544.
+ *
+ * This includes the:
+ *      MAX7356, MAX7357, MAX7358, MAX7367, MAX7368 and MAX7369
+ *
  * These chips are all controlled via the I2C bus itself, and all have a
  * single 8-bit register. The upstream "parent" bus fans out to two,
  * four, or eight downstream busses or channels; which of these
 #define PCA954X_IRQ_OFFSET 4
 
 enum pca_type {
+       max_7356,
+       max_7357,
+       max_7358,
+       max_7367,
+       max_7368,
+       max_7369,
        pca_9540,
        pca_9542,
        pca_9543,
        raw_spinlock_t lock;
 };
 
-/* Provide specs for the PCA954x types we know about */
+/* Provide specs for the MAX735x, PCA954x and PCA984x types we know about */
 static const struct chip_desc chips[] = {
+       [max_7356] = {
+               .nchans = 8,
+               .muxtype = pca954x_isswi,
+               .id = { .manufacturer_id = I2C_DEVICE_ID_NONE },
+       },
+       [max_7357] = {
+               .nchans = 8,
+               .muxtype = pca954x_isswi,
+               .id = { .manufacturer_id = I2C_DEVICE_ID_NONE },
+               /*
+                * No interrupt controller support. The interrupt
+                * provides information about stuck channels.
+                */
+       },
+       [max_7358] = {
+               .nchans = 8,
+               .muxtype = pca954x_isswi,
+               .id = { .manufacturer_id = I2C_DEVICE_ID_NONE },
+               /*
+                * No interrupt controller support. The interrupt
+                * provides information about stuck channels.
+                */
+       },
+       [max_7367] = {
+               .nchans = 4,
+               .muxtype = pca954x_isswi,
+               .has_irq = 1,
+               .id = { .manufacturer_id = I2C_DEVICE_ID_NONE },
+       },
+       [max_7368] = {
+               .nchans = 4,
+               .muxtype = pca954x_isswi,
+               .id = { .manufacturer_id = I2C_DEVICE_ID_NONE },
+       },
+       [max_7369] = {
+               .nchans = 4,
+               .enable = 0x4,
+               .muxtype = pca954x_ismux,
+               .has_irq = 1,
+               .id = { .manufacturer_id = I2C_DEVICE_ID_NONE },
+       },
        [pca_9540] = {
                .nchans = 2,
                .enable = 0x4,
 };
 
 static const struct i2c_device_id pca954x_id[] = {
+       { "max7356", max_7356 },
+       { "max7357", max_7357 },
+       { "max7358", max_7358 },
+       { "max7367", max_7367 },
+       { "max7368", max_7368 },
+       { "max7369", max_7369 },
        { "pca9540", pca_9540 },
        { "pca9542", pca_9542 },
        { "pca9543", pca_9543 },
 MODULE_DEVICE_TABLE(i2c, pca954x_id);
 
 static const struct of_device_id pca954x_of_match[] = {
+       { .compatible = "maxim,max7356", .data = &chips[max_7356] },
+       { .compatible = "maxim,max7357", .data = &chips[max_7357] },
+       { .compatible = "maxim,max7358", .data = &chips[max_7358] },
+       { .compatible = "maxim,max7367", .data = &chips[max_7367] },
+       { .compatible = "maxim,max7368", .data = &chips[max_7368] },
+       { .compatible = "maxim,max7369", .data = &chips[max_7369] },
        { .compatible = "nxp,pca9540", .data = &chips[pca_9540] },
        { .compatible = "nxp,pca9542", .data = &chips[pca_9542] },
        { .compatible = "nxp,pca9543", .data = &chips[pca_9543] },