diff options
author | Axel Lin <axel.lin@ingics.com> | 2014-02-11 07:54:17 -0500 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-02-11 12:02:31 -0500 |
commit | c5c67e31bc1b96658169b5b553b9be42e2ca6368 (patch) | |
tree | 1f9fc1dc6bee8ffa964ee1729008db7df775674e /drivers/spi/spi-sc18is602.c | |
parent | 589f6a90e6c5cda51ecb89799c5bff4074e9ef77 (diff) |
spi: sc18is602: Move checking chip_select for SC18IS602 to sc18is602_setup
So it will be checked when spi device is added onto the spi bus.
spi_add_device() calls spi_setup() which then calls spi->master->setup().
No need to check it every time sc18is602_transfer_one() is called.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Acked-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'drivers/spi/spi-sc18is602.c')
-rw-r--r-- | drivers/spi/spi-sc18is602.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/spi/spi-sc18is602.c b/drivers/spi/spi-sc18is602.c index b3ac776def9b..7fba10bba3b0 100644 --- a/drivers/spi/spi-sc18is602.c +++ b/drivers/spi/spi-sc18is602.c | |||
@@ -205,12 +205,6 @@ static int sc18is602_transfer_one(struct spi_master *master, | |||
205 | struct spi_transfer *t; | 205 | struct spi_transfer *t; |
206 | int status = 0; | 206 | int status = 0; |
207 | 207 | ||
208 | /* SC18IS602 does not support CS2 */ | ||
209 | if (hw->id == sc18is602 && spi->chip_select == 2) { | ||
210 | status = -ENXIO; | ||
211 | goto error; | ||
212 | } | ||
213 | |||
214 | hw->tlen = 0; | 208 | hw->tlen = 0; |
215 | list_for_each_entry(t, &m->transfers, transfer_list) { | 209 | list_for_each_entry(t, &m->transfers, transfer_list) { |
216 | u32 hz = t->speed_hz ? : spi->max_speed_hz; | 210 | u32 hz = t->speed_hz ? : spi->max_speed_hz; |
@@ -238,13 +232,23 @@ static int sc18is602_transfer_one(struct spi_master *master, | |||
238 | if (t->delay_usecs) | 232 | if (t->delay_usecs) |
239 | udelay(t->delay_usecs); | 233 | udelay(t->delay_usecs); |
240 | } | 234 | } |
241 | error: | ||
242 | m->status = status; | 235 | m->status = status; |
243 | spi_finalize_current_message(master); | 236 | spi_finalize_current_message(master); |
244 | 237 | ||
245 | return status; | 238 | return status; |
246 | } | 239 | } |
247 | 240 | ||
241 | static int sc18is602_setup(struct spi_device *spi) | ||
242 | { | ||
243 | struct sc18is602 *hw = spi_master_get_devdata(spi->master); | ||
244 | |||
245 | /* SC18IS602 does not support CS2 */ | ||
246 | if (hw->id == sc18is602 && spi->chip_select == 2) | ||
247 | return -ENXIO; | ||
248 | |||
249 | return 0; | ||
250 | } | ||
251 | |||
248 | static int sc18is602_probe(struct i2c_client *client, | 252 | static int sc18is602_probe(struct i2c_client *client, |
249 | const struct i2c_device_id *id) | 253 | const struct i2c_device_id *id) |
250 | { | 254 | { |
@@ -298,6 +302,7 @@ static int sc18is602_probe(struct i2c_client *client, | |||
298 | master->bus_num = client->adapter->nr; | 302 | master->bus_num = client->adapter->nr; |
299 | master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST; | 303 | master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST; |
300 | master->bits_per_word_mask = SPI_BPW_MASK(8); | 304 | master->bits_per_word_mask = SPI_BPW_MASK(8); |
305 | master->setup = sc18is602_setup; | ||
301 | master->transfer_one_message = sc18is602_transfer_one; | 306 | master->transfer_one_message = sc18is602_transfer_one; |
302 | master->dev.of_node = np; | 307 | master->dev.of_node = np; |
303 | 308 | ||