/* * The first generation of image sensors don't have a second part to * their f03 query, as such we have to set some of these values manually
*/ if (query2_len < 1) {
f03->device_count = 1;
f03->rx_queue_length = 7;
} else {
error = rmi_read_block(fn->rmi_dev, fn->fd.query_base_addr + 1,
query2, query2_len); if (error) {
dev_err(dev, "Failed to read second set of query registers (%d).\n",
error); return error;
}
/* * Consume any pending data. Some devices like to spam with * 0xaa 0x00 announcements which may confuse us as we try to * probe the device.
*/
error = rmi_read_block(fn->rmi_dev, data_addr, &obs, ob_len); if (!error)
rmi_dbg(RMI_DEBUG_FN, &fn->dev, "%s: Consumed %*ph (%d) from PS2 guest\n",
__func__, ob_len, obs, ob_len);
if (!f03->serio_registered) {
error = rmi_f03_register_pt(f03); if (error) return error;
f03->serio_registered = true;
} else { /* * We must be re-configuring the sensor, just enable * interrupts for this function.
*/
fn->rmi_dev->driver->set_irq_bits(fn->rmi_dev, fn->irq_mask);
}
if (drvdata->attn_data.data) { /* First grab the data passed by the transport device */ if (drvdata->attn_data.size < ob_len) {
dev_warn(&fn->dev, "F03 interrupted, but data is missing!\n"); return IRQ_HANDLED;
}
memcpy(obs, drvdata->attn_data.data, ob_len);
drvdata->attn_data.data += ob_len;
drvdata->attn_data.size -= ob_len;
} else { /* Grab all of the data registers, and check them for data */
error = rmi_read_block(fn->rmi_dev, data_addr, &obs, ob_len); if (error) {
dev_err(&fn->dev, "%s: Failed to read F03 output buffers: %d\n",
__func__, error);
serio_interrupt(f03->serio, 0, SERIO_TIMEOUT); return IRQ_RETVAL(error);
}
}
for (i = 0; i < ob_len; i += RMI_F03_OB_SIZE) {
ob_status = obs[i];
ob_data = obs[i + RMI_F03_OB_DATA_OFFSET];
serio_flags = 0;
if (!(ob_status & RMI_F03_RX_DATA_OFB)) continue;
if (ob_status & RMI_F03_OB_FLAG_TIMEOUT)
serio_flags |= SERIO_TIMEOUT; if (ob_status & RMI_F03_OB_FLAG_PARITY)
serio_flags |= SERIO_PARITY;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.