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 | |
| 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>
| -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 | ||
