Lines Matching refs:fc
49 static int yt2_1380_fc_set_gpio_mode(struct yt2_1380_fc *fc, bool enable)
51 struct pinctrl_state *state = enable ? fc->gpio_state : fc->uart_state;
54 ret = pinctrl_select_state(fc->pinctrl, state);
56 dev_err(fc->dev, "Error %d setting pinctrl state\n", ret);
64 static bool yt2_1380_fc_dedicated_charger_connected(struct yt2_1380_fc *fc)
66 return extcon_get_state(fc->extcon, EXTCON_CHG_USB_DCP) > 0;
69 static bool yt2_1380_fc_fast_charger_connected(struct yt2_1380_fc *fc)
71 return extcon_get_state(fc->extcon, EXTCON_CHG_USB_FAST) > 0;
76 struct yt2_1380_fc *fc = container_of(work, struct yt2_1380_fc, work);
80 if (yt2_1380_fc_fast_charger_connected(fc))
85 ret = yt2_1380_fc_set_gpio_mode(fc, false);
90 if (!yt2_1380_fc_dedicated_charger_connected(fc))
94 ret = serdev_device_write_buf(to_serdev_device(fc->dev), "SC", strlen("SC"));
96 dev_err(fc->dev, "Error %d writing to uart\n", ret);
103 if (!yt2_1380_fc_dedicated_charger_connected(fc))
112 ret = yt2_1380_fc_set_gpio_mode(fc, true);
118 if (yt2_1380_fc_fast_charger_connected(fc))
122 dev_dbg(fc->dev, "Failed to switch to 12V charging (not the original charger?)\n");
124 yt2_1380_fc_set_gpio_mode(fc, false);
130 struct yt2_1380_fc *fc = container_of(nb, struct yt2_1380_fc, nb);
132 schedule_work(&fc->work);
154 struct yt2_1380_fc *fc;
157 fc = devm_kzalloc(dev, sizeof(*fc), GFP_KERNEL);
158 if (!fc)
161 fc->dev = dev;
162 fc->nb.notifier_call = yt2_1380_fc_extcon_evt;
163 INIT_WORK(&fc->work, yt2_1380_fc_worker);
169 fc->extcon = extcon_get_extcon_dev(YT2_1380_FC_EXTCON_NAME);
170 if (IS_ERR(fc->extcon))
171 return dev_err_probe(dev, PTR_ERR(fc->extcon), "getting extcon\n");
173 fc->pinctrl = devm_pinctrl_get(dev);
174 if (IS_ERR(fc->pinctrl))
175 return dev_err_probe(dev, PTR_ERR(fc->pinctrl), "getting pinctrl\n");
181 fc->gpio_state = pinctrl_lookup_state(fc->pinctrl, "uart3_gpio");
182 fc->uart_state = pinctrl_lookup_state(fc->pinctrl, "uart3_uart");
183 if (IS_ERR(fc->gpio_state) || IS_ERR(fc->uart_state))
186 ret = yt2_1380_fc_set_gpio_mode(fc, true);
190 fc->uart3_txd = devm_gpiod_get(dev, "uart3_txd", GPIOD_OUT_HIGH);
191 if (IS_ERR(fc->uart3_txd))
192 return dev_err_probe(dev, PTR_ERR(fc->uart3_txd), "getting uart3_txd gpio\n");
194 fc->uart3_rxd = devm_gpiod_get(dev, "uart3_rxd", GPIOD_OUT_HIGH);
195 if (IS_ERR(fc->uart3_rxd))
196 return dev_err_probe(dev, PTR_ERR(fc->uart3_rxd), "getting uart3_rxd gpio\n");
198 ret = yt2_1380_fc_set_gpio_mode(fc, false);
202 serdev_device_set_drvdata(serdev, fc);
212 ret = devm_extcon_register_notifier_all(dev, fc->extcon, &fc->nb);
217 schedule_work(&fc->work);