Lines Matching refs:par

119 static void broadsheet_gpio_issue_data(struct broadsheetfb_par *par, u16 data)
121 par->board->set_ctl(par, BS_WR, 0);
122 par->board->set_hdb(par, data);
123 par->board->set_ctl(par, BS_WR, 1);
126 static void broadsheet_gpio_issue_cmd(struct broadsheetfb_par *par, u16 data)
128 par->board->set_ctl(par, BS_DC, 0);
129 broadsheet_gpio_issue_data(par, data);
132 static void broadsheet_gpio_send_command(struct broadsheetfb_par *par, u16 data)
134 par->board->wait_for_rdy(par);
136 par->board->set_ctl(par, BS_CS, 0);
137 broadsheet_gpio_issue_cmd(par, data);
138 par->board->set_ctl(par, BS_DC, 1);
139 par->board->set_ctl(par, BS_CS, 1);
142 static void broadsheet_gpio_send_cmdargs(struct broadsheetfb_par *par, u16 cmd,
147 par->board->wait_for_rdy(par);
149 par->board->set_ctl(par, BS_CS, 0);
150 broadsheet_gpio_issue_cmd(par, cmd);
151 par->board->set_ctl(par, BS_DC, 1);
154 broadsheet_gpio_issue_data(par, argv[i]);
155 par->board->set_ctl(par, BS_CS, 1);
158 static void broadsheet_mmio_send_cmdargs(struct broadsheetfb_par *par, u16 cmd,
163 par->board->mmio_write(par, BS_MMIO_CMD, cmd);
166 par->board->mmio_write(par, BS_MMIO_DATA, argv[i]);
169 static void broadsheet_send_command(struct broadsheetfb_par *par, u16 data)
171 if (par->board->mmio_write)
172 par->board->mmio_write(par, BS_MMIO_CMD, data);
174 broadsheet_gpio_send_command(par, data);
177 static void broadsheet_send_cmdargs(struct broadsheetfb_par *par, u16 cmd,
180 if (par->board->mmio_write)
181 broadsheet_mmio_send_cmdargs(par, cmd, argc, argv);
183 broadsheet_gpio_send_cmdargs(par, cmd, argc, argv);
186 static void broadsheet_gpio_burst_write(struct broadsheetfb_par *par, int size,
192 par->board->set_ctl(par, BS_CS, 0);
193 par->board->set_ctl(par, BS_DC, 1);
196 par->board->set_ctl(par, BS_WR, 0);
199 par->board->set_hdb(par, tmp);
200 par->board->set_ctl(par, BS_WR, 1);
203 par->board->set_ctl(par, BS_CS, 1);
206 static void broadsheet_mmio_burst_write(struct broadsheetfb_par *par, int size,
215 par->board->mmio_write(par, BS_MMIO_DATA, tmp);
220 static void broadsheet_burst_write(struct broadsheetfb_par *par, int size,
223 if (par->board->mmio_write)
224 broadsheet_mmio_burst_write(par, size, data);
226 broadsheet_gpio_burst_write(par, size, data);
229 static u16 broadsheet_gpio_get_data(struct broadsheetfb_par *par)
233 par->board->wait_for_rdy(par);
236 par->board->set_ctl(par, BS_DC, 1);
237 par->board->set_ctl(par, BS_CS, 0);
238 par->board->set_ctl(par, BS_WR, 0);
240 res = par->board->get_hdb(par);
243 par->board->set_ctl(par, BS_WR, 1);
244 par->board->set_ctl(par, BS_CS, 1);
250 static u16 broadsheet_get_data(struct broadsheetfb_par *par)
252 if (par->board->mmio_read)
253 return par->board->mmio_read(par);
255 return broadsheet_gpio_get_data(par);
258 static void broadsheet_gpio_write_reg(struct broadsheetfb_par *par, u16 reg,
262 par->board->wait_for_rdy(par);
265 par->board->set_ctl(par, BS_CS, 0);
267 broadsheet_gpio_issue_cmd(par, BS_CMD_WR_REG);
269 par->board->set_ctl(par, BS_DC, 1);
271 broadsheet_gpio_issue_data(par, reg);
272 broadsheet_gpio_issue_data(par, data);
274 par->board->set_ctl(par, BS_CS, 1);
277 static void broadsheet_mmio_write_reg(struct broadsheetfb_par *par, u16 reg,
280 par->board->mmio_write(par, BS_MMIO_CMD, BS_CMD_WR_REG);
281 par->board->mmio_write(par, BS_MMIO_DATA, reg);
282 par->board->mmio_write(par, BS_MMIO_DATA, data);
286 static void broadsheet_write_reg(struct broadsheetfb_par *par, u16 reg,
289 if (par->board->mmio_write)
290 broadsheet_mmio_write_reg(par, reg, data);
292 broadsheet_gpio_write_reg(par, reg, data);
295 static void broadsheet_write_reg32(struct broadsheetfb_par *par, u16 reg,
298 broadsheet_write_reg(par, reg, cpu_to_le32(data) & 0xFFFF);
299 broadsheet_write_reg(par, reg + 2, (cpu_to_le32(data) >> 16) & 0xFFFF);
303 static u16 broadsheet_read_reg(struct broadsheetfb_par *par, u16 reg)
305 broadsheet_send_cmdargs(par, BS_CMD_RD_REG, 1, &reg);
306 par->board->wait_for_rdy(par);
307 return broadsheet_get_data(par);
311 static int is_broadsheet_pll_locked(struct broadsheetfb_par *par)
313 return broadsheet_read_reg(par, 0x000A) & 0x0001;
316 static int broadsheet_setup_plls(struct broadsheetfb_par *par)
322 broadsheet_write_reg(par, 0x0006, 0x0000);
324 broadsheet_write_reg(par, 0x0010, 0x0004);
325 broadsheet_write_reg(par, 0x0012, 0x5949);
326 broadsheet_write_reg(par, 0x0014, 0x0040);
327 broadsheet_write_reg(par, 0x0016, 0x0000);
333 } while (!is_broadsheet_pll_locked(par));
335 tmp = broadsheet_read_reg(par, 0x0006);
337 broadsheet_write_reg(par, 0x0006, tmp);
342 static int broadsheet_setup_spi(struct broadsheetfb_par *par)
345 broadsheet_write_reg(par, 0x0204, ((3 << 3) | 1));
346 broadsheet_write_reg(par, 0x0208, 0x0001);
351 static int broadsheet_setup_spiflash(struct broadsheetfb_par *par,
355 *orig_sfmcd = broadsheet_read_reg(par, 0x0204);
356 broadsheet_write_reg(par, 0x0208, 0);
357 broadsheet_write_reg(par, 0x0204, 0);
358 broadsheet_write_reg(par, 0x0204, ((3 << 3) | 1));
363 static int broadsheet_spiflash_wait_for_bit(struct broadsheetfb_par *par,
370 tmp = broadsheet_read_reg(par, reg);
379 static int broadsheet_spiflash_write_byte(struct broadsheetfb_par *par, u8 data)
381 broadsheet_write_reg(par, 0x0202, (data | 0x100));
383 return broadsheet_spiflash_wait_for_bit(par, 0x0206, 3, 0, 100);
386 static int broadsheet_spiflash_read_byte(struct broadsheetfb_par *par, u8 *data)
391 broadsheet_write_reg(par, 0x0202, 0);
393 err = broadsheet_spiflash_wait_for_bit(par, 0x0206, 3, 0, 100);
397 tmp = broadsheet_read_reg(par, 0x200);
404 static int broadsheet_spiflash_wait_for_status(struct broadsheetfb_par *par,
411 broadsheet_write_reg(par, 0x0208, 1);
413 err = broadsheet_spiflash_write_byte(par, 0x05);
417 err = broadsheet_spiflash_read_byte(par, &tmp);
421 broadsheet_write_reg(par, 0x0208, 0);
429 dev_err(par->info->device, "Timed out waiting for spiflash status\n");
433 broadsheet_write_reg(par, 0x0208, 0);
437 static int broadsheet_spiflash_op_on_address(struct broadsheetfb_par *par,
444 broadsheet_write_reg(par, 0x0208, 1);
446 err = broadsheet_spiflash_write_byte(par, op);
452 err = broadsheet_spiflash_write_byte(par, tmp);
460 static int broadsheet_verify_spiflash(struct broadsheetfb_par *par,
466 err = broadsheet_spiflash_op_on_address(par, 0xAB, 0x00000000);
470 err = broadsheet_spiflash_read_byte(par, &sig);
475 dev_err(par->info->device, "Unexpected flash type\n");
483 broadsheet_write_reg(par, 0x0208, 0);
487 static int broadsheet_setup_for_wfm_write(struct broadsheetfb_par *par,
493 err = broadsheet_setup_plls(par);
497 broadsheet_write_reg(par, 0x0106, 0x0203);
499 err = broadsheet_setup_spi(par);
503 err = broadsheet_setup_spiflash(par, initial_sfmcd);
507 return broadsheet_verify_spiflash(par, flash_type);
510 static int broadsheet_spiflash_write_control(struct broadsheetfb_par *par,
515 broadsheet_write_reg(par, 0x0208, 1);
517 err = broadsheet_spiflash_write_byte(par, 0x06);
519 err = broadsheet_spiflash_write_byte(par, 0x04);
521 broadsheet_write_reg(par, 0x0208, 0);
525 static int broadsheet_spiflash_erase_sector(struct broadsheetfb_par *par,
530 broadsheet_spiflash_write_control(par, 1);
532 err = broadsheet_spiflash_op_on_address(par, 0xD8, addr);
534 broadsheet_write_reg(par, 0x0208, 0);
539 err = broadsheet_spiflash_wait_for_status(par, 1000);
544 static int broadsheet_spiflash_read_range(struct broadsheetfb_par *par,
550 err = broadsheet_spiflash_op_on_address(par, 0x03, addr);
555 err = broadsheet_spiflash_read_byte(par, &data[i]);
561 broadsheet_write_reg(par, 0x0208, 0);
566 static int broadsheet_spiflash_write_page(struct broadsheetfb_par *par,
572 broadsheet_spiflash_write_control(par, 1);
574 err = broadsheet_spiflash_op_on_address(par, 0x02, addr);
579 err = broadsheet_spiflash_write_byte(par, data[i]);
584 broadsheet_write_reg(par, 0x0208, 0);
586 err = broadsheet_spiflash_wait_for_status(par, 100);
592 static int broadsheet_spiflash_write_sector(struct broadsheetfb_par *par,
599 err = broadsheet_spiflash_write_page(par, addr + i, &data[i]);
611 static int broadsheet_spiflash_rewrite_sector(struct broadsheetfb_par *par,
636 err = broadsheet_spiflash_read_range(par, start_sector_addr,
657 err = broadsheet_spiflash_read_range(par, tail_start_addr,
666 err = broadsheet_spiflash_erase_sector(par, start_sector_addr);
671 err = broadsheet_spiflash_write_sector(par, start_sector_addr,
678 static int broadsheet_write_spiflash(struct broadsheetfb_par *par, u32 wfm_addr,
703 err = broadsheet_spiflash_rewrite_sector(par, sector_size,
715 static int broadsheet_store_waveform_to_spiflash(struct broadsheetfb_par *par,
722 err = broadsheet_setup_for_wfm_write(par, &initial_sfmcd, &flash_type);
726 err = broadsheet_write_spiflash(par, 0x886, wfm, wfm_size, flash_type);
729 broadsheet_write_reg(par, 0x0204, initial_sfmcd);
739 struct broadsheetfb_par *par = info->par;
758 mutex_lock(&(par->io_lock));
759 err = broadsheet_store_waveform_to_spiflash(par, fw_entry->data,
762 mutex_unlock(&(par->io_lock));
781 static void broadsheet_init_display(struct broadsheetfb_par *par)
784 int xres = par->info->var.xres;
785 int yres = par->info->var.yres;
787 args[0] = panel_table[par->panel_index].w;
788 args[1] = panel_table[par->panel_index].h;
789 args[2] = panel_table[par->panel_index].sdcfg;
790 args[3] = panel_table[par->panel_index].gdcfg;
791 args[4] = panel_table[par->panel_index].lutfmt;
792 broadsheet_send_cmdargs(par, BS_CMD_INIT_DSPE_CFG, 5, args);
795 broadsheet_send_cmdargs(par, BS_CMD_INIT_DSPE_CFG, 5, args);
797 args[0] = panel_table[par->panel_index].fsynclen;
798 args[1] = panel_table[par->panel_index].fendfbegin;
799 args[2] = panel_table[par->panel_index].lsynclen;
800 args[3] = panel_table[par->panel_index].lendlbegin;
801 args[4] = panel_table[par->panel_index].pixclk;
802 broadsheet_send_cmdargs(par, BS_CMD_INIT_DSPE_TMG, 5, args);
804 broadsheet_write_reg32(par, 0x310, xres*yres*2);
809 broadsheet_send_cmdargs(par, BS_CMD_RD_WFM_INFO, 2, args);
811 broadsheet_send_command(par, BS_CMD_UPD_GDRV_CLR);
813 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_TRG);
815 broadsheet_write_reg(par, 0x330, 0x84);
817 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_TRG);
820 broadsheet_send_cmdargs(par, BS_CMD_LD_IMG, 1, args);
823 broadsheet_send_cmdargs(par, BS_CMD_WR_REG, 1, args);
825 broadsheet_burst_write(par, (panel_table[par->panel_index].w *
826 panel_table[par->panel_index].h)/2,
827 (u16 *) par->info->screen_base);
829 broadsheet_send_command(par, BS_CMD_LD_IMG_END);
832 broadsheet_send_cmdargs(par, BS_CMD_UPD_FULL, 1, args);
834 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_TRG);
836 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_FREND);
838 par->board->wait_for_rdy(par);
841 static void broadsheet_identify(struct broadsheetfb_par *par)
844 struct device *dev = par->info->device;
846 rev = broadsheet_read_reg(par, BS_REG_REV);
847 prc = broadsheet_read_reg(par, BS_REG_PRC);
856 static void broadsheet_init(struct broadsheetfb_par *par)
858 broadsheet_send_command(par, BS_CMD_INIT_SYS_RUN);
861 broadsheet_init_display(par);
864 static void broadsheetfb_dpy_update_pages(struct broadsheetfb_par *par,
868 unsigned char *buf = (unsigned char *)par->info->screen_base;
870 mutex_lock(&(par->io_lock));
879 args[3] = cpu_to_le16(par->info->var.xres);
881 broadsheet_send_cmdargs(par, BS_CMD_LD_IMG_AREA, 5, args);
884 broadsheet_send_cmdargs(par, BS_CMD_WR_REG, 1, args);
886 buf += y1 * par->info->var.xres;
887 broadsheet_burst_write(par, ((1 + y2 - y1) * par->info->var.xres)/2,
890 broadsheet_send_command(par, BS_CMD_LD_IMG_END);
893 broadsheet_send_cmdargs(par, BS_CMD_UPD_FULL, 1, args);
895 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_TRG);
897 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_FREND);
899 par->board->wait_for_rdy(par);
900 mutex_unlock(&(par->io_lock));
904 static void broadsheetfb_dpy_update(struct broadsheetfb_par *par)
908 mutex_lock(&(par->io_lock));
910 broadsheet_send_cmdargs(par, BS_CMD_LD_IMG, 1, args);
913 broadsheet_send_cmdargs(par, BS_CMD_WR_REG, 1, args);
914 broadsheet_burst_write(par, (panel_table[par->panel_index].w *
915 panel_table[par->panel_index].h)/2,
916 (u16 *) par->info->screen_base);
918 broadsheet_send_command(par, BS_CMD_LD_IMG_END);
921 broadsheet_send_cmdargs(par, BS_CMD_UPD_FULL, 1, args);
923 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_TRG);
925 broadsheet_send_command(par, BS_CMD_WAIT_DSPE_FREND);
927 par->board->wait_for_rdy(par);
928 mutex_unlock(&(par->io_lock));
957 broadsheetfb_dpy_update_pages(info->par, y1, y1 + h);
968 broadsheetfb_dpy_update(info->par);
970 broadsheetfb_dpy_update_pages(info->par, y1,
978 struct broadsheetfb_par *par = info->par;
982 broadsheetfb_dpy_update(par);
988 struct broadsheetfb_par *par = info->par;
992 broadsheetfb_dpy_update(par);
998 struct broadsheetfb_par *par = info->par;
1002 broadsheetfb_dpy_update(par);
1012 struct broadsheetfb_par *par = info->par;
1046 broadsheetfb_dpy_update(par);
1072 struct broadsheetfb_par *par;
1124 par = info->par;
1125 par->panel_index = panel_index;
1126 par->info = info;
1127 par->board = board;
1128 par->write_reg = broadsheet_write_reg;
1129 par->read_reg = broadsheet_read_reg;
1130 init_waitqueue_head(&par->waitq);
1132 mutex_init(&par->io_lock);
1151 retval = par->board->setup_irq(info);
1156 retval = board->init(par);
1160 broadsheet_identify(par);
1162 broadsheet_init(par);
1183 board->cleanup(par);
1201 struct broadsheetfb_par *par = info->par;
1206 par->board->cleanup(par);
1209 module_put(par->board->owner);