mirror of https://gitee.com/openkylin/linux.git
gpio: crystalcove: use gpiochip data pointer
This makes the driver use the data pointer added to the gpio_chip to store a pointer to the state container instead of relying on container_of(). Cc: Shobhit Kumar <shobhit.kumar@intel.com> Cc: Zhu, Lejun <lejun.zhu@linux.intel.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
e51b55236c
commit
435cc3d428
|
@ -86,11 +86,6 @@ struct crystalcove_gpio {
|
||||||
bool set_irq_mask;
|
bool set_irq_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct crystalcove_gpio *to_cg(struct gpio_chip *gc)
|
|
||||||
{
|
|
||||||
return container_of(gc, struct crystalcove_gpio, chip);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int to_reg(int gpio, enum ctrl_register reg_type)
|
static inline int to_reg(int gpio, enum ctrl_register reg_type)
|
||||||
{
|
{
|
||||||
int reg;
|
int reg;
|
||||||
|
@ -134,7 +129,7 @@ static void crystalcove_update_irq_ctrl(struct crystalcove_gpio *cg, int gpio)
|
||||||
|
|
||||||
static int crystalcove_gpio_dir_in(struct gpio_chip *chip, unsigned gpio)
|
static int crystalcove_gpio_dir_in(struct gpio_chip *chip, unsigned gpio)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(chip);
|
struct crystalcove_gpio *cg = gpiochip_get_data(chip);
|
||||||
|
|
||||||
if (gpio > CRYSTALCOVE_VGPIO_NUM)
|
if (gpio > CRYSTALCOVE_VGPIO_NUM)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -146,7 +141,7 @@ static int crystalcove_gpio_dir_in(struct gpio_chip *chip, unsigned gpio)
|
||||||
static int crystalcove_gpio_dir_out(struct gpio_chip *chip, unsigned gpio,
|
static int crystalcove_gpio_dir_out(struct gpio_chip *chip, unsigned gpio,
|
||||||
int value)
|
int value)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(chip);
|
struct crystalcove_gpio *cg = gpiochip_get_data(chip);
|
||||||
|
|
||||||
if (gpio > CRYSTALCOVE_VGPIO_NUM)
|
if (gpio > CRYSTALCOVE_VGPIO_NUM)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -157,7 +152,7 @@ static int crystalcove_gpio_dir_out(struct gpio_chip *chip, unsigned gpio,
|
||||||
|
|
||||||
static int crystalcove_gpio_get(struct gpio_chip *chip, unsigned gpio)
|
static int crystalcove_gpio_get(struct gpio_chip *chip, unsigned gpio)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(chip);
|
struct crystalcove_gpio *cg = gpiochip_get_data(chip);
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
|
@ -174,7 +169,7 @@ static int crystalcove_gpio_get(struct gpio_chip *chip, unsigned gpio)
|
||||||
static void crystalcove_gpio_set(struct gpio_chip *chip,
|
static void crystalcove_gpio_set(struct gpio_chip *chip,
|
||||||
unsigned gpio, int value)
|
unsigned gpio, int value)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(chip);
|
struct crystalcove_gpio *cg = gpiochip_get_data(chip);
|
||||||
|
|
||||||
if (gpio > CRYSTALCOVE_VGPIO_NUM)
|
if (gpio > CRYSTALCOVE_VGPIO_NUM)
|
||||||
return;
|
return;
|
||||||
|
@ -187,7 +182,8 @@ static void crystalcove_gpio_set(struct gpio_chip *chip,
|
||||||
|
|
||||||
static int crystalcove_irq_type(struct irq_data *data, unsigned type)
|
static int crystalcove_irq_type(struct irq_data *data, unsigned type)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(irq_data_get_irq_chip_data(data));
|
struct crystalcove_gpio *cg =
|
||||||
|
gpiochip_get_data(irq_data_get_irq_chip_data(data));
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case IRQ_TYPE_NONE:
|
case IRQ_TYPE_NONE:
|
||||||
|
@ -213,14 +209,16 @@ static int crystalcove_irq_type(struct irq_data *data, unsigned type)
|
||||||
|
|
||||||
static void crystalcove_bus_lock(struct irq_data *data)
|
static void crystalcove_bus_lock(struct irq_data *data)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(irq_data_get_irq_chip_data(data));
|
struct crystalcove_gpio *cg =
|
||||||
|
gpiochip_get_data(irq_data_get_irq_chip_data(data));
|
||||||
|
|
||||||
mutex_lock(&cg->buslock);
|
mutex_lock(&cg->buslock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void crystalcove_bus_sync_unlock(struct irq_data *data)
|
static void crystalcove_bus_sync_unlock(struct irq_data *data)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(irq_data_get_irq_chip_data(data));
|
struct crystalcove_gpio *cg =
|
||||||
|
gpiochip_get_data(irq_data_get_irq_chip_data(data));
|
||||||
int gpio = data->hwirq;
|
int gpio = data->hwirq;
|
||||||
|
|
||||||
if (cg->update & UPDATE_IRQ_TYPE)
|
if (cg->update & UPDATE_IRQ_TYPE)
|
||||||
|
@ -234,7 +232,8 @@ static void crystalcove_bus_sync_unlock(struct irq_data *data)
|
||||||
|
|
||||||
static void crystalcove_irq_unmask(struct irq_data *data)
|
static void crystalcove_irq_unmask(struct irq_data *data)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(irq_data_get_irq_chip_data(data));
|
struct crystalcove_gpio *cg =
|
||||||
|
gpiochip_get_data(irq_data_get_irq_chip_data(data));
|
||||||
|
|
||||||
cg->set_irq_mask = false;
|
cg->set_irq_mask = false;
|
||||||
cg->update |= UPDATE_IRQ_MASK;
|
cg->update |= UPDATE_IRQ_MASK;
|
||||||
|
@ -242,7 +241,8 @@ static void crystalcove_irq_unmask(struct irq_data *data)
|
||||||
|
|
||||||
static void crystalcove_irq_mask(struct irq_data *data)
|
static void crystalcove_irq_mask(struct irq_data *data)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(irq_data_get_irq_chip_data(data));
|
struct crystalcove_gpio *cg =
|
||||||
|
gpiochip_get_data(irq_data_get_irq_chip_data(data));
|
||||||
|
|
||||||
cg->set_irq_mask = true;
|
cg->set_irq_mask = true;
|
||||||
cg->update |= UPDATE_IRQ_MASK;
|
cg->update |= UPDATE_IRQ_MASK;
|
||||||
|
@ -288,7 +288,7 @@ static irqreturn_t crystalcove_gpio_irq_handler(int irq, void *data)
|
||||||
static void crystalcove_gpio_dbg_show(struct seq_file *s,
|
static void crystalcove_gpio_dbg_show(struct seq_file *s,
|
||||||
struct gpio_chip *chip)
|
struct gpio_chip *chip)
|
||||||
{
|
{
|
||||||
struct crystalcove_gpio *cg = to_cg(chip);
|
struct crystalcove_gpio *cg = gpiochip_get_data(chip);
|
||||||
int gpio, offset;
|
int gpio, offset;
|
||||||
unsigned int ctlo, ctli, mirqs0, mirqsx, irq;
|
unsigned int ctlo, ctli, mirqs0, mirqsx, irq;
|
||||||
|
|
||||||
|
@ -345,7 +345,7 @@ static int crystalcove_gpio_probe(struct platform_device *pdev)
|
||||||
cg->chip.dbg_show = crystalcove_gpio_dbg_show;
|
cg->chip.dbg_show = crystalcove_gpio_dbg_show;
|
||||||
cg->regmap = pmic->regmap;
|
cg->regmap = pmic->regmap;
|
||||||
|
|
||||||
retval = gpiochip_add(&cg->chip);
|
retval = gpiochip_add_data(&cg->chip, cg);
|
||||||
if (retval) {
|
if (retval) {
|
||||||
dev_warn(&pdev->dev, "add gpio chip error: %d\n", retval);
|
dev_warn(&pdev->dev, "add gpio chip error: %d\n", retval);
|
||||||
return retval;
|
return retval;
|
||||||
|
|
Loading…
Reference in New Issue