Lines Matching refs:ts_nbus

28 struct ts_nbus {
42 static int ts_nbus_init_pdata(struct platform_device *pdev, struct ts_nbus
43 *ts_nbus)
45 ts_nbus->data = devm_gpiod_get_array(&pdev->dev, "ts,data",
47 if (IS_ERR(ts_nbus->data)) {
49 return PTR_ERR(ts_nbus->data);
52 ts_nbus->csn = devm_gpiod_get(&pdev->dev, "ts,csn", GPIOD_OUT_HIGH);
53 if (IS_ERR(ts_nbus->csn)) {
55 return PTR_ERR(ts_nbus->csn);
58 ts_nbus->txrx = devm_gpiod_get(&pdev->dev, "ts,txrx", GPIOD_OUT_HIGH);
59 if (IS_ERR(ts_nbus->txrx)) {
61 return PTR_ERR(ts_nbus->txrx);
64 ts_nbus->strobe = devm_gpiod_get(&pdev->dev, "ts,strobe", GPIOD_OUT_HIGH);
65 if (IS_ERR(ts_nbus->strobe)) {
67 return PTR_ERR(ts_nbus->strobe);
70 ts_nbus->ale = devm_gpiod_get(&pdev->dev, "ts,ale", GPIOD_OUT_HIGH);
71 if (IS_ERR(ts_nbus->ale)) {
73 return PTR_ERR(ts_nbus->ale);
76 ts_nbus->rdy = devm_gpiod_get(&pdev->dev, "ts,rdy", GPIOD_IN);
77 if (IS_ERR(ts_nbus->rdy)) {
79 return PTR_ERR(ts_nbus->rdy);
89 static void ts_nbus_set_direction(struct ts_nbus *ts_nbus, int direction)
95 gpiod_direction_input(ts_nbus->data->desc[i]);
99 gpiod_direction_output(ts_nbus->data->desc[i], 1);
108 static void ts_nbus_reset_bus(struct ts_nbus *ts_nbus)
114 gpiod_set_array_value_cansleep(8, ts_nbus->data->desc,
115 ts_nbus->data->info, values);
116 gpiod_set_value_cansleep(ts_nbus->csn, 0);
117 gpiod_set_value_cansleep(ts_nbus->strobe, 0);
118 gpiod_set_value_cansleep(ts_nbus->ale, 0);
124 static void ts_nbus_start_transaction(struct ts_nbus *ts_nbus)
126 gpiod_set_value_cansleep(ts_nbus->strobe, 1);
133 static int ts_nbus_read_byte(struct ts_nbus *ts_nbus, u8 *val)
135 struct gpio_descs *gpios = ts_nbus->data;
153 static void ts_nbus_write_byte(struct ts_nbus *ts_nbus, u8 byte)
155 struct gpio_descs *gpios = ts_nbus->data;
168 static int ts_nbus_read_bus(struct ts_nbus *ts_nbus, u8 *val)
170 ts_nbus_reset_bus(ts_nbus);
171 ts_nbus_start_transaction(ts_nbus);
173 return ts_nbus_read_byte(ts_nbus, val);
181 static void ts_nbus_write_bus(struct ts_nbus *ts_nbus, int cmd, u8 val)
183 ts_nbus_reset_bus(ts_nbus);
186 gpiod_set_value_cansleep(ts_nbus->ale, 1);
188 ts_nbus_write_byte(ts_nbus, val);
189 ts_nbus_start_transaction(ts_nbus);
196 int ts_nbus_read(struct ts_nbus *ts_nbus, u8 adr, u16 *val)
202 mutex_lock(&ts_nbus->lock);
205 gpiod_set_value_cansleep(ts_nbus->txrx, 0);
208 ts_nbus_write_bus(ts_nbus, TS_NBUS_WRITE_ADR, adr);
211 ts_nbus_set_direction(ts_nbus, TS_NBUS_DIRECTION_IN);
219 ret = ts_nbus_read_bus(ts_nbus, &byte);
226 gpiod_set_value_cansleep(ts_nbus->csn, 1);
227 ret = gpiod_get_value_cansleep(ts_nbus->rdy);
232 ts_nbus_set_direction(ts_nbus, TS_NBUS_DIRECTION_OUT);
234 mutex_unlock(&ts_nbus->lock);
243 int ts_nbus_write(struct ts_nbus *ts_nbus, u8 adr, u16 val)
248 mutex_lock(&ts_nbus->lock);
251 gpiod_set_value_cansleep(ts_nbus->txrx, 1);
254 ts_nbus_write_bus(ts_nbus, TS_NBUS_WRITE_ADR, adr);
258 ts_nbus_write_bus(ts_nbus, TS_NBUS_WRITE_VAL, (u8)(val >> (i * 8)));
261 gpiod_set_value_cansleep(ts_nbus->csn, 1);
262 while (gpiod_get_value_cansleep(ts_nbus->rdy) != 0) {
263 gpiod_set_value_cansleep(ts_nbus->csn, 0);
264 gpiod_set_value_cansleep(ts_nbus->csn, 1);
267 mutex_unlock(&ts_nbus->lock);
278 struct ts_nbus *ts_nbus;
281 ts_nbus = devm_kzalloc(dev, sizeof(*ts_nbus), GFP_KERNEL);
282 if (!ts_nbus)
285 mutex_init(&ts_nbus->lock);
287 ret = ts_nbus_init_pdata(pdev, ts_nbus);
318 ts_nbus->pwm = pwm;
323 dev_set_drvdata(dev, ts_nbus);
336 struct ts_nbus *ts_nbus = dev_get_drvdata(&pdev->dev);
339 mutex_lock(&ts_nbus->lock);
340 pwm_disable(ts_nbus->pwm);
341 mutex_unlock(&ts_nbus->lock);
356 .name = "ts_nbus",
363 MODULE_ALIAS("platform:ts_nbus");