Skip to content

Commit 543aa2c

Browse files
codrin989wsakernel
authored andcommitted
i2c: at91: Move to generic GPIO bus recovery
Make the Microchip at91 driver the first to use the generic GPIO bus recovery support from the I2C core and discard the driver implementation. Signed-off-by: Codrin Ciubotariu <[email protected]> Signed-off-by: Wolfram Sang <[email protected]>
1 parent 23a698f commit 543aa2c

File tree

2 files changed

+3
-69
lines changed

2 files changed

+3
-69
lines changed

drivers/i2c/busses/i2c-at91-master.c

Lines changed: 3 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -816,79 +816,16 @@ static int at91_twi_configure_dma(struct at91_twi_dev *dev, u32 phy_addr)
816816
return ret;
817817
}
818818

819-
static void at91_prepare_twi_recovery(struct i2c_adapter *adap)
820-
{
821-
struct at91_twi_dev *dev = i2c_get_adapdata(adap);
822-
823-
pinctrl_select_state(dev->pinctrl, dev->pinctrl_pins_gpio);
824-
}
825-
826-
static void at91_unprepare_twi_recovery(struct i2c_adapter *adap)
827-
{
828-
struct at91_twi_dev *dev = i2c_get_adapdata(adap);
829-
830-
pinctrl_select_state(dev->pinctrl, dev->pinctrl_pins_default);
831-
}
832-
833819
static int at91_init_twi_recovery_gpio(struct platform_device *pdev,
834820
struct at91_twi_dev *dev)
835821
{
836822
struct i2c_bus_recovery_info *rinfo = &dev->rinfo;
837823

838-
dev->pinctrl = devm_pinctrl_get(&pdev->dev);
839-
if (!dev->pinctrl || IS_ERR(dev->pinctrl)) {
824+
rinfo->pinctrl = devm_pinctrl_get(&pdev->dev);
825+
if (!rinfo->pinctrl || IS_ERR(rinfo->pinctrl)) {
840826
dev_info(dev->dev, "can't get pinctrl, bus recovery not supported\n");
841-
return PTR_ERR(dev->pinctrl);
827+
return PTR_ERR(rinfo->pinctrl);
842828
}
843-
844-
dev->pinctrl_pins_default = pinctrl_lookup_state(dev->pinctrl,
845-
PINCTRL_STATE_DEFAULT);
846-
dev->pinctrl_pins_gpio = pinctrl_lookup_state(dev->pinctrl,
847-
"gpio");
848-
if (IS_ERR(dev->pinctrl_pins_default) ||
849-
IS_ERR(dev->pinctrl_pins_gpio)) {
850-
dev_info(&pdev->dev, "pinctrl states incomplete for recovery\n");
851-
return -EINVAL;
852-
}
853-
854-
/*
855-
* pins will be taken as GPIO, so we might as well inform pinctrl about
856-
* this and move the state to GPIO
857-
*/
858-
pinctrl_select_state(dev->pinctrl, dev->pinctrl_pins_gpio);
859-
860-
rinfo->sda_gpiod = devm_gpiod_get(&pdev->dev, "sda", GPIOD_IN);
861-
if (PTR_ERR(rinfo->sda_gpiod) == -EPROBE_DEFER)
862-
return -EPROBE_DEFER;
863-
864-
rinfo->scl_gpiod = devm_gpiod_get(&pdev->dev, "scl",
865-
GPIOD_OUT_HIGH_OPEN_DRAIN);
866-
if (PTR_ERR(rinfo->scl_gpiod) == -EPROBE_DEFER)
867-
return -EPROBE_DEFER;
868-
869-
if (IS_ERR(rinfo->sda_gpiod) ||
870-
IS_ERR(rinfo->scl_gpiod)) {
871-
dev_info(&pdev->dev, "recovery information incomplete\n");
872-
if (!IS_ERR(rinfo->sda_gpiod)) {
873-
gpiod_put(rinfo->sda_gpiod);
874-
rinfo->sda_gpiod = NULL;
875-
}
876-
if (!IS_ERR(rinfo->scl_gpiod)) {
877-
gpiod_put(rinfo->scl_gpiod);
878-
rinfo->scl_gpiod = NULL;
879-
}
880-
pinctrl_select_state(dev->pinctrl, dev->pinctrl_pins_default);
881-
return -EINVAL;
882-
}
883-
884-
/* change the state of the pins back to their default state */
885-
pinctrl_select_state(dev->pinctrl, dev->pinctrl_pins_default);
886-
887-
dev_info(&pdev->dev, "using scl, sda for recovery\n");
888-
889-
rinfo->prepare_recovery = at91_prepare_twi_recovery;
890-
rinfo->unprepare_recovery = at91_unprepare_twi_recovery;
891-
rinfo->recover_bus = i2c_generic_scl_recovery;
892829
dev->adapter.bus_recovery_info = rinfo;
893830

894831
return 0;

drivers/i2c/busses/i2c-at91.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,6 @@ struct at91_twi_dev {
157157
struct at91_twi_dma dma;
158158
bool slave_detected;
159159
struct i2c_bus_recovery_info rinfo;
160-
struct pinctrl *pinctrl;
161-
struct pinctrl_state *pinctrl_pins_default;
162-
struct pinctrl_state *pinctrl_pins_gpio;
163160
#ifdef CONFIG_I2C_AT91_SLAVE_EXPERIMENTAL
164161
unsigned smr;
165162
struct i2c_client *slave;

0 commit comments

Comments
 (0)