Lines Matching +full:tx +full:- +full:m
1 // SPDX-License-Identifier: GPL-2.0-only
10 #include "pinctrl-mcp23s08.h"
18 * Driver data holds all the per-chip data.
29 struct spi_device *spi = to_spi_device(mcp->dev); in mcp23sxx_spi_write()
30 struct spi_message m; in mcp23sxx_spi_write() local
31 struct spi_transfer t[2] = { { .tx_buf = &mcp->addr, .len = 1, }, in mcp23sxx_spi_write()
34 spi_message_init(&m); in mcp23sxx_spi_write()
35 spi_message_add_tail(&t[0], &m); in mcp23sxx_spi_write()
36 spi_message_add_tail(&t[1], &m); in mcp23sxx_spi_write()
38 return spi_sync(spi, &m); in mcp23sxx_spi_write()
46 struct spi_device *spi = to_spi_device(mcp->dev); in mcp23sxx_spi_gather_write()
47 struct spi_message m; in mcp23sxx_spi_gather_write() local
48 struct spi_transfer t[3] = { { .tx_buf = &mcp->addr, .len = 1, }, in mcp23sxx_spi_gather_write()
52 spi_message_init(&m); in mcp23sxx_spi_gather_write()
53 spi_message_add_tail(&t[0], &m); in mcp23sxx_spi_gather_write()
54 spi_message_add_tail(&t[1], &m); in mcp23sxx_spi_gather_write()
55 spi_message_add_tail(&t[2], &m); in mcp23sxx_spi_gather_write()
57 return spi_sync(spi, &m); in mcp23sxx_spi_gather_write()
64 struct spi_device *spi = to_spi_device(mcp->dev); in mcp23sxx_spi_read()
65 u8 tx[2]; in mcp23sxx_spi_read() local
68 return -EINVAL; in mcp23sxx_spi_read()
70 tx[0] = mcp->addr | 0x01; in mcp23sxx_spi_read()
71 tx[1] = *((u8 *) reg); in mcp23sxx_spi_read()
73 return spi_write_then_read(spi, tx, sizeof(tx), val, val_size); in mcp23sxx_spi_read()
91 mcp->reg_shift = 0; in mcp23s08_spi_regmap_init()
92 mcp->chip.ngpio = 8; in mcp23s08_spi_regmap_init()
93 mcp->chip.label = devm_kasprintf(dev, GFP_KERNEL, "mcp23s08.%d", addr); in mcp23s08_spi_regmap_init()
94 if (!mcp->chip.label) in mcp23s08_spi_regmap_init()
95 return -ENOMEM; in mcp23s08_spi_regmap_init()
100 return -ENOMEM; in mcp23s08_spi_regmap_init()
105 mcp->reg_shift = 1; in mcp23s08_spi_regmap_init()
106 mcp->chip.ngpio = 16; in mcp23s08_spi_regmap_init()
107 mcp->chip.label = devm_kasprintf(dev, GFP_KERNEL, "mcp23s17.%d", addr); in mcp23s08_spi_regmap_init()
108 if (!mcp->chip.label) in mcp23s08_spi_regmap_init()
109 return -ENOMEM; in mcp23s08_spi_regmap_init()
114 return -ENOMEM; in mcp23s08_spi_regmap_init()
119 mcp->reg_shift = 1; in mcp23s08_spi_regmap_init()
120 mcp->chip.ngpio = 16; in mcp23s08_spi_regmap_init()
121 mcp->chip.label = "mcp23s18"; in mcp23s08_spi_regmap_init()
124 name = config->name; in mcp23s08_spi_regmap_init()
129 return -EINVAL; in mcp23s08_spi_regmap_init()
134 return -ENOMEM; in mcp23s08_spi_regmap_init()
136 copy->name = name; in mcp23s08_spi_regmap_init()
138 mcp->regmap = devm_regmap_init(dev, &mcp23sxx_spi_regmap, mcp, copy); in mcp23s08_spi_regmap_init()
139 if (IS_ERR(mcp->regmap)) in mcp23s08_spi_regmap_init()
140 dev_err(dev, "regmap init failed for %s\n", mcp->chip.label); in mcp23s08_spi_regmap_init()
141 return PTR_ERR_OR_ZERO(mcp->regmap); in mcp23s08_spi_regmap_init()
146 struct device *dev = &spi->dev; in mcp23s08_probe()
161 type = spi_get_device_id(spi)->driver_data; in mcp23s08_probe()
163 ret = device_property_read_u32(dev, "microchip,spi-present-mask", &v); in mcp23s08_probe()
165 ret = device_property_read_u32(dev, "mcp,spi-present-mask", &v); in mcp23s08_probe()
167 dev_err(dev, "missing spi-present-mask"); in mcp23s08_probe()
174 dev_err(dev, "invalid spi-present-mask"); in mcp23s08_probe()
175 return -ENODEV; in mcp23s08_probe()
182 return -ENOMEM; in mcp23s08_probe()
187 data->mcp[addr] = &data->chip[--chips]; in mcp23s08_probe()
188 data->mcp[addr]->irq = spi->irq; in mcp23s08_probe()
190 ret = mcp23s08_spi_regmap_init(data->mcp[addr], dev, addr, type); in mcp23s08_probe()
194 data->mcp[addr]->pinctrl_desc.name = devm_kasprintf(dev, GFP_KERNEL, in mcp23s08_probe()
195 "mcp23xxx-pinctrl.%d", in mcp23s08_probe()
197 if (!data->mcp[addr]->pinctrl_desc.name) in mcp23s08_probe()
198 return -ENOMEM; in mcp23s08_probe()
200 ret = mcp23s08_probe_one(data->mcp[addr], dev, 0x40 | (addr << 1), type, -1); in mcp23s08_probe()
204 ngpio += data->mcp[addr]->chip.ngpio; in mcp23s08_probe()
206 data->ngpio = ngpio; in mcp23s08_probe()