Lines Matching full:par

155 static void ssd1307fb_update_display(struct ssd1307fb_par *par)  in ssd1307fb_update_display()  argument
158 u8 *vmem = par->info->screen_buffer; in ssd1307fb_update_display()
159 unsigned int line_length = par->info->fix.line_length; in ssd1307fb_update_display()
160 unsigned int pages = DIV_ROUND_UP(par->height, 8); in ssd1307fb_update_display()
163 array = ssd1307fb_alloc_array(par->width * pages, SSD1307FB_DATA); in ssd1307fb_update_display()
197 for (j = 0; j < par->width; j++) { in ssd1307fb_update_display()
199 u32 array_idx = i * par->width + j; in ssd1307fb_update_display()
202 if (i + 1 == pages && par->height % 8) in ssd1307fb_update_display()
203 m = par->height % 8; in ssd1307fb_update_display()
213 ssd1307fb_write_array(par->client, array, par->width * pages); in ssd1307fb_update_display()
221 struct ssd1307fb_par *par = info->par; in ssd1307fb_write() local
242 ssd1307fb_update_display(par); in ssd1307fb_write()
251 struct ssd1307fb_par *par = info->par; in ssd1307fb_blank() local
254 return ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_OFF); in ssd1307fb_blank()
256 return ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_ON); in ssd1307fb_blank()
261 struct ssd1307fb_par *par = info->par; in ssd1307fb_fillrect() local
263 ssd1307fb_update_display(par); in ssd1307fb_fillrect()
268 struct ssd1307fb_par *par = info->par; in ssd1307fb_copyarea() local
270 ssd1307fb_update_display(par); in ssd1307fb_copyarea()
275 struct ssd1307fb_par *par = info->par; in ssd1307fb_imageblit() local
277 ssd1307fb_update_display(par); in ssd1307fb_imageblit()
293 ssd1307fb_update_display(info->par); in ssd1307fb_deferred_io()
296 static int ssd1307fb_init(struct ssd1307fb_par *par) in ssd1307fb_init() argument
302 if (par->device_info->need_pwm) { in ssd1307fb_init()
303 par->pwm = pwm_get(&par->client->dev, NULL); in ssd1307fb_init()
304 if (IS_ERR(par->pwm)) { in ssd1307fb_init()
305 dev_err(&par->client->dev, "Could not get PWM from device tree!\n"); in ssd1307fb_init()
306 return PTR_ERR(par->pwm); in ssd1307fb_init()
309 pwm_init_state(par->pwm, &pwmstate); in ssd1307fb_init()
311 pwm_apply_state(par->pwm, &pwmstate); in ssd1307fb_init()
314 pwm_enable(par->pwm); in ssd1307fb_init()
316 dev_dbg(&par->client->dev, "Using PWM%d with a %lluns period.\n", in ssd1307fb_init()
317 par->pwm->pwm, pwm_get_period(par->pwm)); in ssd1307fb_init()
321 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CONTRAST); in ssd1307fb_init()
325 ret = ssd1307fb_write_cmd(par->client, par->contrast); in ssd1307fb_init()
330 if (par->seg_remap) { in ssd1307fb_init()
331 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SEG_REMAP_ON); in ssd1307fb_init()
337 com_invdir = 0xc0 | par->com_invdir << 3; in ssd1307fb_init()
338 ret = ssd1307fb_write_cmd(par->client, com_invdir); in ssd1307fb_init()
343 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_MULTIPLEX_RATIO); in ssd1307fb_init()
347 ret = ssd1307fb_write_cmd(par->client, par->height - 1); in ssd1307fb_init()
352 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_DISPLAY_OFFSET); in ssd1307fb_init()
356 ret = ssd1307fb_write_cmd(par->client, par->com_offset); in ssd1307fb_init()
361 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_CLOCK_FREQ); in ssd1307fb_init()
365 dclk = ((par->dclk_div - 1) & 0xf) | (par->dclk_frq & 0xf) << 4; in ssd1307fb_init()
366 ret = ssd1307fb_write_cmd(par->client, dclk); in ssd1307fb_init()
371 if (par->area_color_enable || par->low_power) { in ssd1307fb_init()
374 ret = ssd1307fb_write_cmd(par->client, in ssd1307fb_init()
379 mode = (par->area_color_enable ? 0x30 : 0) | in ssd1307fb_init()
380 (par->low_power ? 5 : 0); in ssd1307fb_init()
381 ret = ssd1307fb_write_cmd(par->client, mode); in ssd1307fb_init()
387 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PRECHARGE_PERIOD); in ssd1307fb_init()
391 precharge = (par->prechargep1 & 0xf) | (par->prechargep2 & 0xf) << 4; in ssd1307fb_init()
392 ret = ssd1307fb_write_cmd(par->client, precharge); in ssd1307fb_init()
397 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COM_PINS_CONFIG); in ssd1307fb_init()
401 compins = 0x02 | !par->com_seq << 4 | par->com_lrremap << 5; in ssd1307fb_init()
402 ret = ssd1307fb_write_cmd(par->client, compins); in ssd1307fb_init()
407 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_VCOMH); in ssd1307fb_init()
411 ret = ssd1307fb_write_cmd(par->client, par->vcomh); in ssd1307fb_init()
416 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CHARGE_PUMP); in ssd1307fb_init()
420 ret = ssd1307fb_write_cmd(par->client, in ssd1307fb_init()
421 BIT(4) | (par->device_info->need_chargepump ? BIT(2) : 0)); in ssd1307fb_init()
426 if (par->lookup_table_set) { in ssd1307fb_init()
429 ret = ssd1307fb_write_cmd(par->client, in ssd1307fb_init()
434 for (i = 0; i < ARRAY_SIZE(par->lookup_table); ++i) { in ssd1307fb_init()
435 u8 val = par->lookup_table[i]; in ssd1307fb_init()
438 dev_warn(&par->client->dev, in ssd1307fb_init()
441 ret = ssd1307fb_write_cmd(par->client, val); in ssd1307fb_init()
448 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_ADDRESS_MODE); in ssd1307fb_init()
452 ret = ssd1307fb_write_cmd(par->client, in ssd1307fb_init()
458 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COL_RANGE); in ssd1307fb_init()
462 ret = ssd1307fb_write_cmd(par->client, par->col_offset); in ssd1307fb_init()
466 ret = ssd1307fb_write_cmd(par->client, par->col_offset + par->width - 1); in ssd1307fb_init()
471 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PAGE_RANGE); in ssd1307fb_init()
475 ret = ssd1307fb_write_cmd(par->client, par->page_offset); in ssd1307fb_init()
479 ret = ssd1307fb_write_cmd(par->client, in ssd1307fb_init()
480 par->page_offset + in ssd1307fb_init()
481 DIV_ROUND_UP(par->height, 8) - 1); in ssd1307fb_init()
486 ssd1307fb_update_display(par); in ssd1307fb_init()
489 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_ON); in ssd1307fb_init()
498 struct ssd1307fb_par *par = bl_get_data(bdev); in ssd1307fb_update_bl() local
502 par->contrast = brightness; in ssd1307fb_update_bl()
504 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CONTRAST); in ssd1307fb_update_bl()
507 ret = ssd1307fb_write_cmd(par->client, par->contrast); in ssd1307fb_update_bl()
515 struct ssd1307fb_par *par = bl_get_data(bdev); in ssd1307fb_get_brightness() local
517 return par->contrast; in ssd1307fb_get_brightness()
588 struct ssd1307fb_par *par; in ssd1307fb_probe() local
596 par = info->par; in ssd1307fb_probe()
597 par->info = info; in ssd1307fb_probe()
598 par->client = client; in ssd1307fb_probe()
600 par->device_info = device_get_match_data(dev); in ssd1307fb_probe()
602 par->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); in ssd1307fb_probe()
603 if (IS_ERR(par->reset)) { in ssd1307fb_probe()
605 PTR_ERR(par->reset)); in ssd1307fb_probe()
606 ret = PTR_ERR(par->reset); in ssd1307fb_probe()
610 par->vbat_reg = devm_regulator_get_optional(dev, "vbat"); in ssd1307fb_probe()
611 if (IS_ERR(par->vbat_reg)) { in ssd1307fb_probe()
612 ret = PTR_ERR(par->vbat_reg); in ssd1307fb_probe()
614 par->vbat_reg = NULL; in ssd1307fb_probe()
621 if (device_property_read_u32(dev, "solomon,width", &par->width)) in ssd1307fb_probe()
622 par->width = 96; in ssd1307fb_probe()
624 if (device_property_read_u32(dev, "solomon,height", &par->height)) in ssd1307fb_probe()
625 par->height = 16; in ssd1307fb_probe()
627 if (device_property_read_u32(dev, "solomon,page-offset", &par->page_offset)) in ssd1307fb_probe()
628 par->page_offset = 1; in ssd1307fb_probe()
630 if (device_property_read_u32(dev, "solomon,col-offset", &par->col_offset)) in ssd1307fb_probe()
631 par->col_offset = 0; in ssd1307fb_probe()
633 if (device_property_read_u32(dev, "solomon,com-offset", &par->com_offset)) in ssd1307fb_probe()
634 par->com_offset = 0; in ssd1307fb_probe()
636 if (device_property_read_u32(dev, "solomon,prechargep1", &par->prechargep1)) in ssd1307fb_probe()
637 par->prechargep1 = 2; in ssd1307fb_probe()
639 if (device_property_read_u32(dev, "solomon,prechargep2", &par->prechargep2)) in ssd1307fb_probe()
640 par->prechargep2 = 2; in ssd1307fb_probe()
643 par->lookup_table, in ssd1307fb_probe()
644 ARRAY_SIZE(par->lookup_table))) in ssd1307fb_probe()
645 par->lookup_table_set = 1; in ssd1307fb_probe()
647 par->seg_remap = !device_property_read_bool(dev, "solomon,segment-no-remap"); in ssd1307fb_probe()
648 par->com_seq = device_property_read_bool(dev, "solomon,com-seq"); in ssd1307fb_probe()
649 par->com_lrremap = device_property_read_bool(dev, "solomon,com-lrremap"); in ssd1307fb_probe()
650 par->com_invdir = device_property_read_bool(dev, "solomon,com-invdir"); in ssd1307fb_probe()
651 par->area_color_enable = in ssd1307fb_probe()
653 par->low_power = device_property_read_bool(dev, "solomon,low-power"); in ssd1307fb_probe()
655 par->contrast = 127; in ssd1307fb_probe()
656 par->vcomh = par->device_info->default_vcomh; in ssd1307fb_probe()
659 if (device_property_read_u32(dev, "solomon,dclk-div", &par->dclk_div)) in ssd1307fb_probe()
660 par->dclk_div = par->device_info->default_dclk_div; in ssd1307fb_probe()
661 if (device_property_read_u32(dev, "solomon,dclk-frq", &par->dclk_frq)) in ssd1307fb_probe()
662 par->dclk_frq = par->device_info->default_dclk_frq; in ssd1307fb_probe()
664 vmem_size = DIV_ROUND_UP(par->width, 8) * par->height; in ssd1307fb_probe()
687 info->fix.line_length = DIV_ROUND_UP(par->width, 8); in ssd1307fb_probe()
691 info->var.xres = par->width; in ssd1307fb_probe()
692 info->var.xres_virtual = par->width; in ssd1307fb_probe()
693 info->var.yres = par->height; in ssd1307fb_probe()
694 info->var.yres_virtual = par->height; in ssd1307fb_probe()
704 if (par->reset) { in ssd1307fb_probe()
706 gpiod_set_value_cansleep(par->reset, 1); in ssd1307fb_probe()
708 gpiod_set_value_cansleep(par->reset, 0); in ssd1307fb_probe()
712 if (par->vbat_reg) { in ssd1307fb_probe()
713 ret = regulator_enable(par->vbat_reg); in ssd1307fb_probe()
720 ret = ssd1307fb_init(par); in ssd1307fb_probe()
731 bl = backlight_device_register(bl_name, dev, par, &ssd1307fb_bl_ops, in ssd1307fb_probe()
739 bl->props.brightness = par->contrast; in ssd1307fb_probe()
750 if (par->device_info->need_pwm) { in ssd1307fb_probe()
751 pwm_disable(par->pwm); in ssd1307fb_probe()
752 pwm_put(par->pwm); in ssd1307fb_probe()
755 if (par->vbat_reg) in ssd1307fb_probe()
756 regulator_disable(par->vbat_reg); in ssd1307fb_probe()
767 struct ssd1307fb_par *par = info->par; in ssd1307fb_remove() local
769 ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_OFF); in ssd1307fb_remove()
774 if (par->device_info->need_pwm) { in ssd1307fb_remove()
775 pwm_disable(par->pwm); in ssd1307fb_remove()
776 pwm_put(par->pwm); in ssd1307fb_remove()
778 if (par->vbat_reg) in ssd1307fb_remove()
779 regulator_disable(par->vbat_reg); in ssd1307fb_remove()