Lines Matching refs:ts_nbus

31 struct ts_nbus {  struct
45 static int ts_nbus_init_pdata(struct platform_device *pdev, struct ts_nbus in ts_nbus_init_pdata() argument
46 *ts_nbus) in ts_nbus_init_pdata()
48 ts_nbus->data = devm_gpiod_get_array(&pdev->dev, "ts,data", in ts_nbus_init_pdata()
50 if (IS_ERR(ts_nbus->data)) { in ts_nbus_init_pdata()
52 return PTR_ERR(ts_nbus->data); in ts_nbus_init_pdata()
55 ts_nbus->csn = devm_gpiod_get(&pdev->dev, "ts,csn", GPIOD_OUT_HIGH); in ts_nbus_init_pdata()
56 if (IS_ERR(ts_nbus->csn)) { in ts_nbus_init_pdata()
58 return PTR_ERR(ts_nbus->csn); in ts_nbus_init_pdata()
61 ts_nbus->txrx = devm_gpiod_get(&pdev->dev, "ts,txrx", GPIOD_OUT_HIGH); in ts_nbus_init_pdata()
62 if (IS_ERR(ts_nbus->txrx)) { in ts_nbus_init_pdata()
64 return PTR_ERR(ts_nbus->txrx); in ts_nbus_init_pdata()
67 ts_nbus->strobe = devm_gpiod_get(&pdev->dev, "ts,strobe", GPIOD_OUT_HIGH); in ts_nbus_init_pdata()
68 if (IS_ERR(ts_nbus->strobe)) { in ts_nbus_init_pdata()
70 return PTR_ERR(ts_nbus->strobe); in ts_nbus_init_pdata()
73 ts_nbus->ale = devm_gpiod_get(&pdev->dev, "ts,ale", GPIOD_OUT_HIGH); in ts_nbus_init_pdata()
74 if (IS_ERR(ts_nbus->ale)) { in ts_nbus_init_pdata()
76 return PTR_ERR(ts_nbus->ale); in ts_nbus_init_pdata()
79 ts_nbus->rdy = devm_gpiod_get(&pdev->dev, "ts,rdy", GPIOD_IN); in ts_nbus_init_pdata()
80 if (IS_ERR(ts_nbus->rdy)) { in ts_nbus_init_pdata()
82 return PTR_ERR(ts_nbus->rdy); in ts_nbus_init_pdata()
92 static void ts_nbus_set_direction(struct ts_nbus *ts_nbus, int direction) in ts_nbus_set_direction() argument
98 gpiod_direction_input(ts_nbus->data->desc[i]); in ts_nbus_set_direction()
102 gpiod_direction_output(ts_nbus->data->desc[i], 1); in ts_nbus_set_direction()
111 static void ts_nbus_reset_bus(struct ts_nbus *ts_nbus) in ts_nbus_reset_bus() argument
117 gpiod_set_array_value_cansleep(8, ts_nbus->data->desc, in ts_nbus_reset_bus()
118 ts_nbus->data->info, values); in ts_nbus_reset_bus()
119 gpiod_set_value_cansleep(ts_nbus->csn, 0); in ts_nbus_reset_bus()
120 gpiod_set_value_cansleep(ts_nbus->strobe, 0); in ts_nbus_reset_bus()
121 gpiod_set_value_cansleep(ts_nbus->ale, 0); in ts_nbus_reset_bus()
127 static void ts_nbus_start_transaction(struct ts_nbus *ts_nbus) in ts_nbus_start_transaction() argument
129 gpiod_set_value_cansleep(ts_nbus->strobe, 1); in ts_nbus_start_transaction()
136 static int ts_nbus_read_byte(struct ts_nbus *ts_nbus, u8 *val) in ts_nbus_read_byte() argument
138 struct gpio_descs *gpios = ts_nbus->data; in ts_nbus_read_byte()
156 static void ts_nbus_write_byte(struct ts_nbus *ts_nbus, u8 byte) in ts_nbus_write_byte() argument
158 struct gpio_descs *gpios = ts_nbus->data; in ts_nbus_write_byte()
171 static int ts_nbus_read_bus(struct ts_nbus *ts_nbus, u8 *val) in ts_nbus_read_bus() argument
173 ts_nbus_reset_bus(ts_nbus); in ts_nbus_read_bus()
174 ts_nbus_start_transaction(ts_nbus); in ts_nbus_read_bus()
176 return ts_nbus_read_byte(ts_nbus, val); in ts_nbus_read_bus()
184 static void ts_nbus_write_bus(struct ts_nbus *ts_nbus, int cmd, u8 val) in ts_nbus_write_bus() argument
186 ts_nbus_reset_bus(ts_nbus); in ts_nbus_write_bus()
189 gpiod_set_value_cansleep(ts_nbus->ale, 1); in ts_nbus_write_bus()
191 ts_nbus_write_byte(ts_nbus, val); in ts_nbus_write_bus()
192 ts_nbus_start_transaction(ts_nbus); in ts_nbus_write_bus()
199 int ts_nbus_read(struct ts_nbus *ts_nbus, u8 adr, u16 *val) in ts_nbus_read() argument
205 mutex_lock(&ts_nbus->lock); in ts_nbus_read()
208 gpiod_set_value_cansleep(ts_nbus->txrx, 0); in ts_nbus_read()
211 ts_nbus_write_bus(ts_nbus, TS_NBUS_WRITE_ADR, adr); in ts_nbus_read()
214 ts_nbus_set_direction(ts_nbus, TS_NBUS_DIRECTION_IN); in ts_nbus_read()
222 ret = ts_nbus_read_bus(ts_nbus, &byte); in ts_nbus_read()
229 gpiod_set_value_cansleep(ts_nbus->csn, 1); in ts_nbus_read()
230 ret = gpiod_get_value_cansleep(ts_nbus->rdy); in ts_nbus_read()
235 ts_nbus_set_direction(ts_nbus, TS_NBUS_DIRECTION_OUT); in ts_nbus_read()
237 mutex_unlock(&ts_nbus->lock); in ts_nbus_read()
246 int ts_nbus_write(struct ts_nbus *ts_nbus, u8 adr, u16 val) in ts_nbus_write() argument
251 mutex_lock(&ts_nbus->lock); in ts_nbus_write()
254 gpiod_set_value_cansleep(ts_nbus->txrx, 1); in ts_nbus_write()
257 ts_nbus_write_bus(ts_nbus, TS_NBUS_WRITE_ADR, adr); in ts_nbus_write()
261 ts_nbus_write_bus(ts_nbus, TS_NBUS_WRITE_VAL, (u8)(val >> (i * 8))); in ts_nbus_write()
264 gpiod_set_value_cansleep(ts_nbus->csn, 1); in ts_nbus_write()
265 while (gpiod_get_value_cansleep(ts_nbus->rdy) != 0) { in ts_nbus_write()
266 gpiod_set_value_cansleep(ts_nbus->csn, 0); in ts_nbus_write()
267 gpiod_set_value_cansleep(ts_nbus->csn, 1); in ts_nbus_write()
270 mutex_unlock(&ts_nbus->lock); in ts_nbus_write()
281 struct ts_nbus *ts_nbus; in ts_nbus_probe() local
284 ts_nbus = devm_kzalloc(dev, sizeof(*ts_nbus), GFP_KERNEL); in ts_nbus_probe()
285 if (!ts_nbus) in ts_nbus_probe()
288 mutex_init(&ts_nbus->lock); in ts_nbus_probe()
290 ret = ts_nbus_init_pdata(pdev, ts_nbus); in ts_nbus_probe()
321 ts_nbus->pwm = pwm; in ts_nbus_probe()
326 dev_set_drvdata(dev, ts_nbus); in ts_nbus_probe()
339 struct ts_nbus *ts_nbus = dev_get_drvdata(&pdev->dev); in ts_nbus_remove() local
342 mutex_lock(&ts_nbus->lock); in ts_nbus_remove()
343 pwm_disable(ts_nbus->pwm); in ts_nbus_remove()
344 mutex_unlock(&ts_nbus->lock); in ts_nbus_remove()