Lines Matching refs:par

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