Lines Matching +full:kirin +full:- +full:based

1 // SPDX-License-Identifier: GPL-2.0
4 * based on Hisilicon Kirin Soc.
6 * Copyright (C) 2017-2018 Hilisicon Electronics Co., Ltd.
56 if (!hisi_hikey_usb->regulator) in hub_power_ctrl()
59 status = regulator_is_enabled(hisi_hikey_usb->regulator); in hub_power_ctrl()
64 ret = regulator_enable(hisi_hikey_usb->regulator); in hub_power_ctrl()
66 ret = regulator_disable(hisi_hikey_usb->regulator); in hub_power_ctrl()
69 dev_err(hisi_hikey_usb->dev, in hub_power_ctrl()
77 if (!hisi_hikey_usb->otg_switch) in usb_switch_ctrl()
80 gpiod_set_value_cansleep(hisi_hikey_usb->otg_switch, switch_to); in usb_switch_ctrl()
86 if (!hisi_hikey_usb->typec_vbus) in usb_typec_power_ctrl()
89 gpiod_set_value_cansleep(hisi_hikey_usb->typec_vbus, value); in usb_typec_power_ctrl()
100 if (!hisi_hikey_usb || !hisi_hikey_usb->dev_role_sw) in relay_set_role_switch()
103 mutex_lock(&hisi_hikey_usb->lock); in relay_set_role_switch()
104 switch (hisi_hikey_usb->role) { in relay_set_role_switch()
123 sw = hisi_hikey_usb->dev_role_sw; in relay_set_role_switch()
124 role = hisi_hikey_usb->role; in relay_set_role_switch()
125 mutex_unlock(&hisi_hikey_usb->lock); in relay_set_role_switch()
134 if (!hisi_hikey_usb || !hisi_hikey_usb->dev_role_sw) in hub_usb_role_switch_set()
135 return -EINVAL; in hub_usb_role_switch_set()
137 mutex_lock(&hisi_hikey_usb->lock); in hub_usb_role_switch_set()
138 hisi_hikey_usb->role = role; in hub_usb_role_switch_set()
139 mutex_unlock(&hisi_hikey_usb->lock); in hub_usb_role_switch_set()
141 schedule_work(&hisi_hikey_usb->work); in hub_usb_role_switch_set()
149 struct device *dev = &pdev->dev; in hisi_hikey_usb_of_role_switch()
152 if (!device_property_read_bool(dev, "usb-role-switch")) in hisi_hikey_usb_of_role_switch()
155 hisi_hikey_usb->otg_switch = devm_gpiod_get(dev, "otg-switch", in hisi_hikey_usb_of_role_switch()
157 if (IS_ERR(hisi_hikey_usb->otg_switch)) { in hisi_hikey_usb_of_role_switch()
158 dev_err(dev, "get otg-switch failed with error %ld\n", in hisi_hikey_usb_of_role_switch()
159 PTR_ERR(hisi_hikey_usb->otg_switch)); in hisi_hikey_usb_of_role_switch()
160 return PTR_ERR(hisi_hikey_usb->otg_switch); in hisi_hikey_usb_of_role_switch()
163 hisi_hikey_usb->typec_vbus = devm_gpiod_get(dev, "typec-vbus", in hisi_hikey_usb_of_role_switch()
165 if (IS_ERR(hisi_hikey_usb->typec_vbus)) { in hisi_hikey_usb_of_role_switch()
166 dev_err(dev, "get typec-vbus failed with error %ld\n", in hisi_hikey_usb_of_role_switch()
167 PTR_ERR(hisi_hikey_usb->typec_vbus)); in hisi_hikey_usb_of_role_switch()
168 return PTR_ERR(hisi_hikey_usb->typec_vbus); in hisi_hikey_usb_of_role_switch()
171 hisi_hikey_usb->reset = devm_gpiod_get_optional(dev, in hisi_hikey_usb_of_role_switch()
172 "hub-reset-en", in hisi_hikey_usb_of_role_switch()
174 if (IS_ERR(hisi_hikey_usb->reset)) { in hisi_hikey_usb_of_role_switch()
175 dev_err(dev, "get hub-reset-en failed with error %ld\n", in hisi_hikey_usb_of_role_switch()
176 PTR_ERR(hisi_hikey_usb->reset)); in hisi_hikey_usb_of_role_switch()
177 return PTR_ERR(hisi_hikey_usb->reset); in hisi_hikey_usb_of_role_switch()
180 hisi_hikey_usb->dev_role_sw = usb_role_switch_get(dev); in hisi_hikey_usb_of_role_switch()
181 if (!hisi_hikey_usb->dev_role_sw) in hisi_hikey_usb_of_role_switch()
182 return -EPROBE_DEFER; in hisi_hikey_usb_of_role_switch()
183 if (IS_ERR(hisi_hikey_usb->dev_role_sw)) { in hisi_hikey_usb_of_role_switch()
185 PTR_ERR(hisi_hikey_usb->dev_role_sw)); in hisi_hikey_usb_of_role_switch()
186 return PTR_ERR(hisi_hikey_usb->dev_role_sw); in hisi_hikey_usb_of_role_switch()
189 INIT_WORK(&hisi_hikey_usb->work, relay_set_role_switch); in hisi_hikey_usb_of_role_switch()
195 hisi_hikey_usb->hub_role_sw = usb_role_switch_register(dev, in hisi_hikey_usb_of_role_switch()
198 if (IS_ERR(hisi_hikey_usb->hub_role_sw)) { in hisi_hikey_usb_of_role_switch()
201 PTR_ERR(hisi_hikey_usb->hub_role_sw)); in hisi_hikey_usb_of_role_switch()
202 usb_role_switch_put(hisi_hikey_usb->dev_role_sw); in hisi_hikey_usb_of_role_switch()
203 return PTR_ERR(hisi_hikey_usb->hub_role_sw); in hisi_hikey_usb_of_role_switch()
211 struct device *dev = &pdev->dev; in hisi_hikey_usb_probe()
217 return -ENOMEM; in hisi_hikey_usb_probe()
219 hisi_hikey_usb->dev = &pdev->dev; in hisi_hikey_usb_probe()
220 mutex_init(&hisi_hikey_usb->lock); in hisi_hikey_usb_probe()
222 hisi_hikey_usb->regulator = devm_regulator_get(dev, "hub-vdd"); in hisi_hikey_usb_probe()
223 if (IS_ERR(hisi_hikey_usb->regulator)) { in hisi_hikey_usb_probe()
224 if (PTR_ERR(hisi_hikey_usb->regulator) == -EPROBE_DEFER) { in hisi_hikey_usb_probe()
225 dev_info(dev, "waiting for hub-vdd-supply\n"); in hisi_hikey_usb_probe()
226 return PTR_ERR(hisi_hikey_usb->regulator); in hisi_hikey_usb_probe()
228 dev_err(dev, "get hub-vdd-supply failed with error %ld\n", in hisi_hikey_usb_probe()
229 PTR_ERR(hisi_hikey_usb->regulator)); in hisi_hikey_usb_probe()
230 return PTR_ERR(hisi_hikey_usb->regulator); in hisi_hikey_usb_probe()
246 if (hisi_hikey_usb->hub_role_sw) { in hisi_hikey_usb_remove()
247 usb_role_switch_unregister(hisi_hikey_usb->hub_role_sw); in hisi_hikey_usb_remove()
249 if (hisi_hikey_usb->dev_role_sw) in hisi_hikey_usb_remove()
250 usb_role_switch_put(hisi_hikey_usb->dev_role_sw); in hisi_hikey_usb_remove()