Lines Matching refs:hw
55 static int sc18is602_wait_ready(struct sc18is602 *hw, int len) in sc18is602_wait_ready() argument
58 int usecs = 1000000 * len / hw->speed + 1; in sc18is602_wait_ready()
62 err = i2c_master_recv(hw->client, dummy, 1); in sc18is602_wait_ready()
70 static int sc18is602_txrx(struct sc18is602 *hw, struct spi_message *msg, in sc18is602_txrx() argument
76 if (hw->tlen == 0) { in sc18is602_txrx()
78 hw->buffer[0] = 1 << msg->spi->chip_select; in sc18is602_txrx()
79 hw->tlen = 1; in sc18is602_txrx()
80 hw->rindex = 0; in sc18is602_txrx()
88 memcpy(&hw->buffer[hw->tlen], t->tx_buf, len); in sc18is602_txrx()
89 hw->tlen += len; in sc18is602_txrx()
93 hw->rindex = hw->tlen - 1; in sc18is602_txrx()
101 hw->rindex = hw->tlen - 1; in sc18is602_txrx()
102 memset(&hw->buffer[hw->tlen], 0, len); in sc18is602_txrx()
103 hw->tlen += len; in sc18is602_txrx()
107 if (do_transfer && hw->tlen > 1) { in sc18is602_txrx()
108 ret = sc18is602_wait_ready(hw, SC18IS602_BUFSIZ); in sc18is602_txrx()
111 ret = i2c_master_send(hw->client, hw->buffer, hw->tlen); in sc18is602_txrx()
114 if (ret != hw->tlen) in sc18is602_txrx()
118 int rlen = hw->rindex + len; in sc18is602_txrx()
120 ret = sc18is602_wait_ready(hw, hw->tlen); in sc18is602_txrx()
123 ret = i2c_master_recv(hw->client, hw->buffer, rlen); in sc18is602_txrx()
128 memcpy(t->rx_buf, &hw->buffer[hw->rindex], len); in sc18is602_txrx()
130 hw->tlen = 0; in sc18is602_txrx()
135 static int sc18is602_setup_transfer(struct sc18is602 *hw, u32 hz, u8 mode) in sc18is602_setup_transfer() argument
148 if (hz >= hw->freq / 4) { in sc18is602_setup_transfer()
150 hw->speed = hw->freq / 4; in sc18is602_setup_transfer()
151 } else if (hz >= hw->freq / 16) { in sc18is602_setup_transfer()
153 hw->speed = hw->freq / 16; in sc18is602_setup_transfer()
154 } else if (hz >= hw->freq / 64) { in sc18is602_setup_transfer()
156 hw->speed = hw->freq / 64; in sc18is602_setup_transfer()
159 hw->speed = hw->freq / 128; in sc18is602_setup_transfer()
167 if (ctrl == hw->ctrl) in sc18is602_setup_transfer()
170 ret = i2c_smbus_write_byte_data(hw->client, 0xf0, ctrl); in sc18is602_setup_transfer()
174 hw->ctrl = ctrl; in sc18is602_setup_transfer()
191 struct sc18is602 *hw = spi_master_get_devdata(master); in sc18is602_transfer_one() local
196 hw->tlen = 0; in sc18is602_transfer_one()
200 status = sc18is602_check_transfer(spi, t, hw->tlen); in sc18is602_transfer_one()
204 status = sc18is602_setup_transfer(hw, t->speed_hz, spi->mode); in sc18is602_transfer_one()
212 status = sc18is602_txrx(hw, m, t, do_transfer); in sc18is602_transfer_one()
230 struct sc18is602 *hw = spi_master_get_devdata(spi->master); in sc18is602_setup() local
233 if (hw->id == sc18is602 && spi->chip_select == 2) in sc18is602_setup()
245 struct sc18is602 *hw; in sc18is602_probe() local
257 hw = spi_master_get_devdata(master); in sc18is602_probe()
258 i2c_set_clientdata(client, hw); in sc18is602_probe()
260 hw->master = master; in sc18is602_probe()
261 hw->client = client; in sc18is602_probe()
262 hw->dev = dev; in sc18is602_probe()
263 hw->ctrl = 0xff; in sc18is602_probe()
265 hw->id = id->driver_data; in sc18is602_probe()
267 switch (hw->id) { in sc18is602_probe()
271 hw->freq = SC18IS602_CLOCK; in sc18is602_probe()
276 hw->freq = pdata->clock_frequency; in sc18is602_probe()
283 hw->freq = be32_to_cpup(val); in sc18is602_probe()
285 if (!hw->freq) in sc18is602_probe()
286 hw->freq = SC18IS602_CLOCK; in sc18is602_probe()
295 master->min_speed_hz = hw->freq / 128; in sc18is602_probe()
296 master->max_speed_hz = hw->freq / 4; in sc18is602_probe()