Lines Matching defs:fsa

74 static int fsa4480_set(struct fsa4480 *fsa)
76 bool reverse = (fsa->orientation == TYPEC_ORIENTATION_REVERSE);
80 if (fsa->swap_sbu_lanes)
84 if (fsa->mode < TYPEC_STATE_MODAL ||
85 (!fsa->svid && (fsa->mode == TYPEC_MODE_USB2 ||
86 fsa->mode == TYPEC_MODE_USB3))) {
89 } else if (fsa->svid) {
90 switch (fsa->mode) {
111 } else if (fsa->mode == TYPEC_MODE_AUDIO) {
117 if (fsa->cur_enable & FSA4480_ENABLE_SBU) {
119 regmap_write(fsa->regmap, FSA4480_SWITCH_ENABLE,
120 fsa->cur_enable & ~FSA4480_ENABLE_SBU);
126 regmap_write(fsa->regmap, FSA4480_SWITCH_SELECT, sel);
127 regmap_write(fsa->regmap, FSA4480_SWITCH_ENABLE, enable);
131 regmap_write(fsa->regmap, FSA4480_FUNCTION_ENABLE,
139 fsa->cur_enable = enable;
147 struct fsa4480 *fsa = typec_switch_get_drvdata(sw);
150 mutex_lock(&fsa->lock);
152 if (fsa->orientation != orientation) {
153 fsa->orientation = orientation;
155 ret = fsa4480_set(fsa);
158 mutex_unlock(&fsa->lock);
165 struct fsa4480 *fsa = typec_mux_get_drvdata(mux);
168 mutex_lock(&fsa->lock);
170 if (fsa->mode != state->mode) {
171 fsa->mode = state->mode;
174 fsa->svid = state->alt->svid;
176 fsa->svid = 0; // No SVID
178 ret = fsa4480_set(fsa);
181 mutex_unlock(&fsa->lock);
198 static int fsa4480_parse_data_lanes_mapping(struct fsa4480 *fsa)
204 ep = fwnode_graph_get_next_endpoint(dev_fwnode(&fsa->client->dev), NULL);
213 dev_err(&fsa->client->dev, "invalid data-lanes property: %d\n", ret);
231 fsa->swap_sbu_lanes = true;
234 dev_err(&fsa->client->dev, "invalid data-lanes mapping\n");
253 struct fsa4480 *fsa;
256 fsa = devm_kzalloc(dev, sizeof(*fsa), GFP_KERNEL);
257 if (!fsa)
260 fsa->client = client;
261 mutex_init(&fsa->lock);
263 ret = fsa4480_parse_data_lanes_mapping(fsa);
267 fsa->regmap = devm_regmap_init_i2c(client, &fsa4480_regmap_config);
268 if (IS_ERR(fsa->regmap))
269 return dev_err_probe(dev, PTR_ERR(fsa->regmap), "failed to initialize regmap\n");
272 fsa->cur_enable = FSA4480_ENABLE_DEVICE | FSA4480_ENABLE_USB;
273 fsa->mode = TYPEC_STATE_SAFE;
274 fsa->orientation = TYPEC_ORIENTATION_NONE;
277 regmap_write(fsa->regmap, FSA4480_SLOW_L, 0x00);
278 regmap_write(fsa->regmap, FSA4480_SLOW_R, 0x00);
279 regmap_write(fsa->regmap, FSA4480_SLOW_MIC, 0x00);
280 regmap_write(fsa->regmap, FSA4480_SLOW_SENSE, 0x00);
281 regmap_write(fsa->regmap, FSA4480_SLOW_GND, 0x00);
282 regmap_write(fsa->regmap, FSA4480_DELAY_L_R, 0x00);
283 regmap_write(fsa->regmap, FSA4480_DELAY_L_MIC, 0x00);
284 regmap_write(fsa->regmap, FSA4480_DELAY_L_SENSE, 0x00);
285 regmap_write(fsa->regmap, FSA4480_DELAY_L_AGND, 0x09);
286 regmap_write(fsa->regmap, FSA4480_SWITCH_SELECT, FSA4480_SEL_USB);
287 regmap_write(fsa->regmap, FSA4480_SWITCH_ENABLE, fsa->cur_enable);
289 sw_desc.drvdata = fsa;
293 fsa->sw = typec_switch_register(dev, &sw_desc);
294 if (IS_ERR(fsa->sw))
295 return dev_err_probe(dev, PTR_ERR(fsa->sw), "failed to register typec switch\n");
297 mux_desc.drvdata = fsa;
301 fsa->mux = typec_mux_register(dev, &mux_desc);
302 if (IS_ERR(fsa->mux)) {
303 typec_switch_unregister(fsa->sw);
304 return dev_err_probe(dev, PTR_ERR(fsa->mux), "failed to register typec mux\n");
307 i2c_set_clientdata(client, fsa);
313 struct fsa4480 *fsa = i2c_get_clientdata(client);
315 typec_mux_unregister(fsa->mux);
316 typec_switch_unregister(fsa->sw);