Symbol: rain
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
100
cec_transmit_attempt_done(rain->adap, CEC_TX_STATUS_NACK);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
103
cec_transmit_attempt_done(rain->adap, CEC_TX_STATUS_LOW_DRIVE);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
110
struct rain *rain =
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
111
container_of(work, struct rain, work);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
117
spin_lock_irqsave(&rain->buf_lock, flags);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
118
if (!rain->buf_len) {
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
119
spin_unlock_irqrestore(&rain->buf_lock, flags);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
123
data = rain->buf[rain->buf_rd_idx];
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
124
rain->buf_len--;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
125
rain->buf_rd_idx = (rain->buf_rd_idx + 1) & 0xff;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
127
spin_unlock_irqrestore(&rain->buf_lock, flags);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
129
if (!rain->cmd_started && data != '?')
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
134
rain->cmd[rain->cmd_idx] = '\0';
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
135
dev_dbg(rain->dev, "received: %s\n", rain->cmd);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
136
if (!memcmp(rain->cmd, "REC", 3) ||
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
137
!memcmp(rain->cmd, "STA", 3)) {
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
138
rain_process_msg(rain);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
140
strscpy(rain->cmd_reply, rain->cmd,
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
141
sizeof(rain->cmd_reply));
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
142
complete(&rain->cmd_done);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
144
rain->cmd_idx = 0;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
145
rain->cmd_started = false;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
149
rain->cmd_idx = 0;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
150
rain->cmd_started = false;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
154
rain->cmd_idx = 0;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
155
rain->cmd_started = true;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
159
if (rain->cmd_idx >= DATA_SIZE - 1) {
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
160
dev_dbg(rain->dev,
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
161
"throwing away %d bytes of garbage\n", rain->cmd_idx);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
162
rain->cmd_idx = 0;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
164
rain->cmd[rain->cmd_idx++] = data;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
173
struct rain *rain = serio_get_drvdata(serio);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
175
spin_lock(&rain->buf_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
176
if (rain->buf_len == DATA_SIZE) {
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
177
spin_unlock(&rain->buf_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
178
dev_warn_once(rain->dev, "buffer overflow\n");
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
181
rain->buf_len++;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
182
rain->buf[rain->buf_wr_idx] = data;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
183
rain->buf_wr_idx = (rain->buf_wr_idx + 1) & 0xff;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
184
spin_unlock(&rain->buf_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
185
schedule_work(&rain->work);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
191
struct rain *rain = serio_get_drvdata(serio);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
193
cancel_work_sync(&rain->work);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
194
cec_unregister_adapter(rain->adap);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
198
kfree(rain);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
201
static int rain_send(struct rain *rain, const char *command)
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
203
int err = serio_write(rain->serio, '!');
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
205
dev_dbg(rain->dev, "send: %s\n", command);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
207
err = serio_write(rain->serio, *command++);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
209
err = serio_write(rain->serio, '~');
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
214
static int rain_send_and_wait(struct rain *rain,
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
219
init_completion(&rain->cmd_done);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
221
mutex_lock(&rain->write_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
222
err = rain_send(rain, cmd);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
226
if (!wait_for_completion_timeout(&rain->cmd_done, HZ)) {
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
230
if (reply && strncmp(rain->cmd_reply, reply, strlen(reply))) {
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
231
dev_dbg(rain->dev,
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
233
cmd, rain->cmd_reply, reply);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
237
mutex_unlock(&rain->write_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
241
static int rain_setup(struct rain *rain, struct serio *serio,
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
246
err = rain_send_and_wait(rain, "R", "REV");
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
249
dev_info(rain->dev, "Firmware version %s\n", rain->cmd_reply + 4);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
251
err = rain_send_and_wait(rain, "Q 1", "QTY");
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
254
err = rain_send_and_wait(rain, "c0000", "CFG");
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
257
return rain_send_and_wait(rain, "A F 0000", "ADR");
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
267
struct rain *rain = cec_get_drvdata(adap);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
273
return rain_send_and_wait(rain, cmd, "ADR");
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
279
struct rain *rain = cec_get_drvdata(adap);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
296
mutex_lock(&rain->write_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
297
err = rain_send(rain, cmd);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
298
mutex_unlock(&rain->write_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
311
struct rain *rain;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
316
rain = kzalloc_obj(*rain);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
318
if (!rain)
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
321
rain->serio = serio;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
322
rain->adap = cec_allocate_adapter(&rain_cec_adap_ops, rain,
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
324
err = PTR_ERR_OR_ZERO(rain->adap);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
328
rain->dev = &serio->dev;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
329
serio_set_drvdata(serio, rain);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
330
INIT_WORK(&rain->work, rain_irq_work_handler);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
331
mutex_init(&rain->write_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
332
spin_lock_init(&rain->buf_lock);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
338
err = rain_setup(rain, serio, &log_addrs, &pa);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
342
err = cec_register_adapter(rain->adap, &serio->dev);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
346
rain->dev = &rain->adap->devnode.dev;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
352
cec_delete_adapter(rain->adap);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
355
kfree(rain);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
66
static void rain_process_msg(struct rain *rain)
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
69
const char *cmd = rain->cmd + 3;
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
89
if (rain->cmd[0] == 'R') {
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
91
cec_received_msg(rain->adap, &msg);
drivers/media/cec/usb/rainshadow/rainshadow-cec.c
97
cec_transmit_attempt_done(rain->adap, CEC_TX_STATUS_OK);