static void sossi_dma_callback(void *data) { omap_stop_lcd_dma(); sossi_stop_transfer(); clk_disable(sossi.fck); sossi.lcdc_callback(sossi.lcdc_callback_data); }
static void sossi_read_data(void *data, unsigned int len) { clk_enable(sossi.fck); set_timing(RD_ACCESS); _set_bits_per_cycle(sossi.bus_pick_count, sossi.bus_pick_width); /* CMD#/DATA */ sossi_set_bits(SOSSI_INIT1_REG, 1 << 18); set_cycles(len); sossi_start_transfer(); while (len >= 4) { *(u32 *) data = sossi_read_reg(SOSSI_FIFO_REG); len -= 4; data += 4; } while (len >= 2) { *(u16 *) data = sossi_read_reg16(SOSSI_FIFO_REG); len -= 2; data += 2; } while (len) { *(u8 *) data = sossi_read_reg8(SOSSI_FIFO_REG); len--; data++; } sossi_stop_transfer(); clk_disable(sossi.fck); }
static void sossi_write_data(const void *data, unsigned int len) { set_timing(WR_ACCESS); /* CMD#/DATA */ sossi_set_bits(SOSSI_INIT1_REG, 1 << 18); set_cycles(len); sossi_start_transfer(); send_data(data, len); sossi_stop_transfer(); wait_end_of_write(); }
static void sossi_write_data(const void *data, unsigned int len) { clk_enable(sossi.fck); set_timing(WR_ACCESS); _set_bits_per_cycle(sossi.bus_pick_count, sossi.bus_pick_width); /* CMD#/DATA */ sossi_set_bits(SOSSI_INIT1_REG, 1 << 18); set_cycles(len); sossi_start_transfer(); send_data(data, len); sossi_stop_transfer(); wait_end_of_write(); clk_disable(sossi.fck); }
static void sossi_read_data(void *data, unsigned int len) { set_timing(RD_ACCESS); /* CMD#/DATA */ sossi_set_bits(SOSSI_INIT1_REG, 1 << 18); set_cycles(len); sossi_start_transfer(); while (len >= 4) { *(u32 *) data = sossi_read_reg(SOSSI_FIFO_REG); len -= 4; data += 4; } while (len >= 2) { *(u16 *) data = sossi_read_reg16(SOSSI_FIFO_REG); len -= 2; data += 2; } while (len) { *(u8 *) data = sossi_read_reg8(SOSSI_FIFO_REG); len--; data++; } sossi_stop_transfer(); }