@@ -816,79 +816,16 @@ static int at91_twi_configure_dma(struct at91_twi_dev *dev, u32 phy_addr)
816
816
return ret ;
817
817
}
818
818
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
-
833
819
static int at91_init_twi_recovery_gpio (struct platform_device * pdev ,
834
820
struct at91_twi_dev * dev )
835
821
{
836
822
struct i2c_bus_recovery_info * rinfo = & dev -> rinfo ;
837
823
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 )) {
840
826
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 );
842
828
}
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 ;
892
829
dev -> adapter .bus_recovery_info = rinfo ;
893
830
894
831
return 0 ;
0 commit comments