mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-25 12:31:07 +00:00
This switches the i801 GPIO mux to use GPIO descriptors for handling the GPIO lines. The previous hack which was reaching inside the GPIO chips etc cannot live on. We pass descriptors along with the GPIO mux device at creation instead. The GPIO mux was only used by way of platform data with a platform device from one place in the kernel: the i801 i2c bus driver. Let's just associate the GPIO descriptor table with the actual device like everyone else and dynamically create a descriptor table passed along with the GPIO i2c mux. This enables simplification of the GPIO i2c mux driver to use only the descriptor API and the OF probe path gets simplified in the process. The i801 driver was registering the GPIO i2c mux with PLATFORM_DEVID_AUTO which would make it hard to predict the device name and assign the descriptor table properly, but this seems to be a mistake to begin with: all of the GPIO mux devices are hardcoded to look up GPIO lines from the "gpio_ich" GPIO chip. If there are more than one mux, there is certainly more than one gpio chip as well, and then we have more serious problems. Switch to PLATFORM_DEVID_NONE instead. There can be only one. Cc: Mika Westerberg <mika.westerberg@linux.intel.com> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Peter Rosin <peda@axentia.se> Cc: Jean Delvare <jdelvare@suse.com> Signed-off-by: Serge Semin <fancer.lancer@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> [Removed a newline, suggested by Andy. /Peter] Signed-off-by: Peter Rosin <peda@axentia.se>
37 lines
1.1 KiB
C
37 lines
1.1 KiB
C
/*
|
|
* i2c-mux-gpio interface to platform code
|
|
*
|
|
* Peter Korsgaard <peter.korsgaard@barco.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef _LINUX_I2C_MUX_GPIO_H
|
|
#define _LINUX_I2C_MUX_GPIO_H
|
|
|
|
/* MUX has no specific idle mode */
|
|
#define I2C_MUX_GPIO_NO_IDLE ((unsigned)-1)
|
|
|
|
/**
|
|
* struct i2c_mux_gpio_platform_data - Platform-dependent data for i2c-mux-gpio
|
|
* @parent: Parent I2C bus adapter number
|
|
* @base_nr: Base I2C bus number to number adapters from or zero for dynamic
|
|
* @values: Array of bitmasks of GPIO settings (low/high) for each
|
|
* position
|
|
* @n_values: Number of multiplexer positions (busses to instantiate)
|
|
* @classes: Optional I2C auto-detection classes
|
|
* @idle: Bitmask to write to MUX when idle or GPIO_I2CMUX_NO_IDLE if not used
|
|
*/
|
|
struct i2c_mux_gpio_platform_data {
|
|
int parent;
|
|
int base_nr;
|
|
const unsigned *values;
|
|
int n_values;
|
|
const unsigned *classes;
|
|
unsigned idle;
|
|
};
|
|
|
|
#endif /* _LINUX_I2C_MUX_GPIO_H */
|