Lines Matching defs:par
160 static int ssd1307fb_set_col_range(struct ssd1307fb_par *par, u8 col_start,
166 if (col_start == par->col_start && col_end == par->col_end)
169 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COL_RANGE);
173 ret = ssd1307fb_write_cmd(par->client, col_start);
177 ret = ssd1307fb_write_cmd(par->client, col_end);
181 par->col_start = col_start;
182 par->col_end = col_end;
186 static int ssd1307fb_set_page_range(struct ssd1307fb_par *par, u8 page_start,
192 if (page_start == par->page_start && page_end == par->page_end)
195 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PAGE_RANGE);
199 ret = ssd1307fb_write_cmd(par->client, page_start);
203 ret = ssd1307fb_write_cmd(par->client, page_end);
207 par->page_start = page_start;
208 par->page_end = page_end;
212 static int ssd1307fb_update_rect(struct ssd1307fb_par *par, unsigned int x,
217 u8 *vmem = par->info->screen_buffer;
218 unsigned int line_length = par->info->fix.line_length;
256 ret = ssd1307fb_set_col_range(par, par->col_offset + x, width);
260 ret = ssd1307fb_set_page_range(par, par->page_offset + y / 8, pages);
268 if (8 * (i + 1) > par->height)
269 m = par->height % 8;
283 ret = ssd1307fb_write_array(par->client, array, width * pages);
290 static int ssd1307fb_update_display(struct ssd1307fb_par *par)
292 return ssd1307fb_update_rect(par, 0, 0, par->width, par->height);
297 struct ssd1307fb_par *par = info->par;
300 return ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_OFF);
302 return ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_ON);
307 struct ssd1307fb_par *par = info->par;
309 ssd1307fb_update_display(par);
315 struct ssd1307fb_par *par = info->par;
317 ssd1307fb_update_rect(par, x, y, width, height);
332 ssd1307fb_update_display(info->par);
335 static int ssd1307fb_init(struct ssd1307fb_par *par)
341 if (par->device_info->need_pwm) {
342 par->pwm = pwm_get(&par->client->dev, NULL);
343 if (IS_ERR(par->pwm)) {
344 dev_err(&par->client->dev, "Could not get PWM from device tree!\n");
345 return PTR_ERR(par->pwm);
348 pwm_init_state(par->pwm, &pwmstate);
350 pwm_apply_state(par->pwm, &pwmstate);
353 pwm_enable(par->pwm);
355 dev_dbg(&par->client->dev, "Using PWM %s with a %lluns period.\n",
356 par->pwm->label, pwm_get_period(par->pwm));
360 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CONTRAST);
364 ret = ssd1307fb_write_cmd(par->client, par->contrast);
369 if (par->seg_remap) {
370 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SEG_REMAP_ON);
376 com_invdir = 0xc0 | par->com_invdir << 3;
377 ret = ssd1307fb_write_cmd(par->client, com_invdir);
382 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_MULTIPLEX_RATIO);
386 ret = ssd1307fb_write_cmd(par->client, par->height - 1);
391 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_DISPLAY_OFFSET);
395 ret = ssd1307fb_write_cmd(par->client, par->com_offset);
400 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_CLOCK_FREQ);
404 dclk = ((par->dclk_div - 1) & 0xf) | (par->dclk_frq & 0xf) << 4;
405 ret = ssd1307fb_write_cmd(par->client, dclk);
410 if (par->area_color_enable || par->low_power) {
413 ret = ssd1307fb_write_cmd(par->client,
418 mode = (par->area_color_enable ? 0x30 : 0) |
419 (par->low_power ? 5 : 0);
420 ret = ssd1307fb_write_cmd(par->client, mode);
426 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PRECHARGE_PERIOD);
430 precharge = (par->prechargep1 & 0xf) | (par->prechargep2 & 0xf) << 4;
431 ret = ssd1307fb_write_cmd(par->client, precharge);
436 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COM_PINS_CONFIG);
440 compins = 0x02 | !par->com_seq << 4 | par->com_lrremap << 5;
441 ret = ssd1307fb_write_cmd(par->client, compins);
446 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_VCOMH);
450 ret = ssd1307fb_write_cmd(par->client, par->vcomh);
455 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CHARGE_PUMP);
459 ret = ssd1307fb_write_cmd(par->client,
460 BIT(4) | (par->device_info->need_chargepump ? BIT(2) : 0));
465 if (par->lookup_table_set) {
468 ret = ssd1307fb_write_cmd(par->client,
473 for (i = 0; i < ARRAY_SIZE(par->lookup_table); ++i) {
474 u8 val = par->lookup_table[i];
477 dev_warn(&par->client->dev,
480 ret = ssd1307fb_write_cmd(par->client, val);
487 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_ADDRESS_MODE);
491 ret = ssd1307fb_write_cmd(par->client,
497 ret = ssd1307fb_update_display(par);
502 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_ON);
511 struct ssd1307fb_par *par = bl_get_data(bdev);
515 par->contrast = brightness;
517 ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CONTRAST);
520 ret = ssd1307fb_write_cmd(par->client, par->contrast);
528 struct ssd1307fb_par *par = bl_get_data(bdev);
530 return par->contrast;
601 struct ssd1307fb_par *par;
609 par = info->par;
610 par->info = info;
611 par->client = client;
613 par->device_info = device_get_match_data(dev);
615 par->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
616 if (IS_ERR(par->reset)) {
617 ret = dev_err_probe(dev, PTR_ERR(par->reset),
622 par->vbat_reg = devm_regulator_get_optional(dev, "vbat");
623 if (IS_ERR(par->vbat_reg)) {
624 ret = PTR_ERR(par->vbat_reg);
626 par->vbat_reg = NULL;
633 if (device_property_read_u32(dev, "solomon,width", &par->width))
634 par->width = 96;
636 if (device_property_read_u32(dev, "solomon,height", &par->height))
637 par->height = 16;
639 if (device_property_read_u32(dev, "solomon,page-offset", &par->page_offset))
640 par->page_offset = 1;
642 if (device_property_read_u32(dev, "solomon,col-offset", &par->col_offset))
643 par->col_offset = 0;
645 if (device_property_read_u32(dev, "solomon,com-offset", &par->com_offset))
646 par->com_offset = 0;
648 if (device_property_read_u32(dev, "solomon,prechargep1", &par->prechargep1))
649 par->prechargep1 = 2;
651 if (device_property_read_u32(dev, "solomon,prechargep2", &par->prechargep2))
652 par->prechargep2 = 2;
655 par->lookup_table,
656 ARRAY_SIZE(par->lookup_table)))
657 par->lookup_table_set = 1;
659 par->seg_remap = !device_property_read_bool(dev, "solomon,segment-no-remap");
660 par->com_seq = device_property_read_bool(dev, "solomon,com-seq");
661 par->com_lrremap = device_property_read_bool(dev, "solomon,com-lrremap");
662 par->com_invdir = device_property_read_bool(dev, "solomon,com-invdir");
663 par->area_color_enable =
665 par->low_power = device_property_read_bool(dev, "solomon,low-power");
667 par->contrast = 127;
668 par->vcomh = par->device_info->default_vcomh;
671 if (device_property_read_u32(dev, "solomon,dclk-div", &par->dclk_div))
672 par->dclk_div = par->device_info->default_dclk_div;
673 if (device_property_read_u32(dev, "solomon,dclk-frq", &par->dclk_frq))
674 par->dclk_frq = par->device_info->default_dclk_frq;
676 vmem_size = DIV_ROUND_UP(par->width, 8) * par->height;
699 info->fix.line_length = DIV_ROUND_UP(par->width, 8);
703 info->var.xres = par->width;
704 info->var.xres_virtual = par->width;
705 info->var.yres = par->height;
706 info->var.yres_virtual = par->height;
716 if (par->reset) {
718 gpiod_set_value_cansleep(par->reset, 1);
720 gpiod_set_value_cansleep(par->reset, 0);
724 if (par->vbat_reg) {
725 ret = regulator_enable(par->vbat_reg);
732 ret = ssd1307fb_init(par);
743 bl = backlight_device_register(bl_name, dev, par, &ssd1307fb_bl_ops,
751 bl->props.brightness = par->contrast;
762 pwm_disable(par->pwm);
763 pwm_put(par->pwm);
765 if (par->vbat_reg)
766 regulator_disable(par->vbat_reg);
777 struct ssd1307fb_par *par = info->par;
779 ssd1307fb_write_cmd(par->client, SSD1307FB_DISPLAY_OFF);
784 pwm_disable(par->pwm);
785 pwm_put(par->pwm);
786 if (par->vbat_reg)
787 regulator_disable(par->vbat_reg);