static ssize_t store_irblaster_freq(struct device *dev, struct device_attribute *attr, const char* buf, size_t len) { frequency = simple_strtol(buf, NULL, 10); /* Disable pwm */ if (frequency == 0) { omap_dm_timer_stop(irb_pwm_timer); omap_dm_timer_disable(irb_pwm_timer); irb_state = 0; return 0; } /* Enable pwm */ if (irb_state == 0) { omap_dm_timer_enable(irb_pwm_timer); omap_dm_timer_set_pwm(irb_pwm_timer, 0, 1, 2); omap_dm_timer_start(irb_pwm_timer); irb_state = 1; } pwm_set_speed(irb_pwm_timer, frequency, duty_cycle); return len; }
static void omap_pwm_led_set_pwm_cycle(struct omap_pwm_led *led, int cycle) { int pwm_frequency = 10000; int def_on; pr_debug("%s: cycle: %i\n", __func__, cycle); if (led->pdata->bkl_max) cycle = ( (cycle * led->pdata->bkl_max ) / 255); if (cycle < led->pdata->bkl_min) cycle = led->pdata->bkl_min; if (led->pdata->bkl_freq) pwm_frequency = led->pdata->bkl_freq; if (cycle != LED_FULL) def_on = led->pdata->invert ? 1:0; else def_on = led->pdata->invert ? 0:1; omap_dm_timer_set_pwm(led->intensity_timer, def_on, 1, OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE); if (cycle != LED_FULL) { pwm_set_speed(led->intensity_timer, pwm_frequency, 256-cycle); omap_dm_timer_start(led->intensity_timer); } else omap_dm_timer_stop(led->intensity_timer); }
static ssize_t store_irblaster_duty(struct device *dev, struct device_attribute *attr, const char* buf, size_t len) { duty_cycle = simple_strtol(buf, NULL, 10); if (irb_state) pwm_set_speed(irb_pwm_timer, frequency, duty_cycle); return len; }
static int panel_set_backlight_level( struct omap_display *disp, int level) { int hw_level; pr_debug("panel_set_backlight_level [%s] %d\n", disp != NULL ? disp->panel->name: "cpt_wvga_48", level); /* skip if panel is not on */ if (panel_state == 0) { saved_bkl_level = level; return 0; } /* clamp the level */ if (level < 0) level = 0; if (level > 255) level = 255; /* nothing to do if levels are equal */ if (bkl_level == level) return 0; /* stop backlight? */ if (level == 0) { if (GPIO_EXISTS(display_gpio.bkl_pwon)) omap_set_gpio_dataout(GPIO_PIN(display_gpio.bkl_pwon), 0); omap_dm_timer_stop(bkl_pwm); omap_dm_timer_disable(bkl_pwm); bkl_level = 0; return 0; } /* start backlight? */ if (bkl_level == 0) { omap_dm_timer_enable(bkl_pwm); omap_dm_timer_set_pwm(bkl_pwm, 0, 1, 2); omap_dm_timer_start(bkl_pwm); if (GPIO_EXISTS(display_gpio.bkl_pwon)) omap_set_gpio_dataout(GPIO_PIN(display_gpio.bkl_pwon), 1); } /* set new level, g7 machines have inverted level */ hw_level = level; if (!machine_is_archos_g6h()) hw_level = 255 - level; pwm_set_speed(bkl_pwm, 10000, hw_level); bkl_level = level; return 0; }
static int panel_set_vcom_level( struct omap_display *disp, int level) { pr_debug("panel_set_vcom_level [%s] %i\n", disp->panel->name, level); /* clamp the level */ if (level < 0) level = 0; if (level > 255) level = 255; /* nothing to do if levels are equal */ if (vcom_level == level) return 0; /* stop vcom? */ if (level == 0) { omap_dm_timer_stop(vcom_pwm); omap_dm_timer_disable(vcom_pwm); vcom_level = 0; return 0; } /* start vcom? */ if (vcom_level == 0) { omap_dm_timer_enable(vcom_pwm); omap_dm_timer_set_pwm(vcom_pwm, 0, 1, 2); omap_dm_timer_start(vcom_pwm); } vcom_level = level; pwm_set_speed(vcom_pwm, 10000, vcom_level); vcom_level = level; return 0; }