Ejemplo n.º 1
0
static int pwm_backlight_update_status(struct backlight_device *bl)
{
	struct pwm_bl_data *pb = dev_get_drvdata(&bl->dev);
	int brightness = bl->props.brightness;
	int max = bl->props.max_brightness;

	if (bl->props.power != FB_BLANK_UNBLANK)
		brightness = 0;

	if (bl->props.fb_blank != FB_BLANK_UNBLANK)
		brightness = 0;

	if (pb->notify)
		brightness = pb->notify(pb->dev, brightness);

	pwm_set_period_ns(pb->pwm, pb->period);
	if (brightness == 0) {
		pwm_set_duty_ns(pb->pwm, 0);
		if(pb->pwm_started != 0){ 
			pwm_stop(pb->pwm);
			pb->pwm_started = 0;
		}
	} else {
		pwm_set_duty_ns(pb->pwm, brightness * pb->period / max);
		if(pb->pwm_started == 0){
			pwm_start(pb->pwm);
			pb->pwm_started = 1;
		}
	}
	return 0;
}
void vibtonz_pwm(int nForce)
{
	static int prev_duty=0;
	t_vib_desc *vib_iter =&vib_desc;
	int pwm_period=0, pwm_duty = 0;

	printk("%s : %d \n", __func__, nForce);
	if( vib_iter->initialized == 0) return;

	pwm_period = vib_iter->pwm_period;
	pwm_duty = pwm_period/2 + ((pwm_period/2 - 2) *nForce) /127;

	if(pwm_duty > vib_iter->pwm_duty)
	{
		pwm_duty = vib_iter->pwm_duty;
	}
	else if(pwm_period - pwm_duty > vib_iter->pwm_duty)
	{
		pwm_duty = pwm_period - vib_iter->pwm_duty;
	}
	
	pwm_set_period_ns(vib_iter->pwm,vib_iter->pwm_period); 	
	pwm_set_polarity(vib_iter->pwm, vib_iter->pwm_polarity);
	pwm_set_duty_ns(vib_iter->pwm, pwm_duty); 
}
Ejemplo n.º 3
0
static int ehrpwm_freq_transition_cb(struct pwm_device *p)
{
	struct ehrpwm_pwm *ehrpwm = to_ehrpwm_pwm(p);
	unsigned long duty_ns;

	p->tick_hz = clk_get_rate(ehrpwm->clk);
	duty_ns = p->duty_ns;
	if (pwm_is_running(p)) {
		pwm_stop(p);
		pwm_set_duty_ns(p, 0);
		pwm_set_period_ns(p, p->period_ns);
		pwm_set_duty_ns(p, duty_ns);
		pwm_start(p);
	} else {
		pwm_set_duty_ns(p, 0);
		pwm_set_period_ns(p, p->period_ns);
		pwm_set_duty_ns(p, duty_ns);
	}
		return 0;
}
Ejemplo n.º 4
0
/*
 * sun4i: 0-16
 * sun5i: 0-256
 */
__s32 BSP_disp_lcd_set_bright(__u32 sel, __u32 bright
#ifdef CONFIG_ARCH_SUN5I
			      , __u32 from_iep
#endif
)
{
	__u32 duty_ns;

	if (!sunxi_is_version_A() && (gpanel_info[sel].lcd_pwm_not_used == 0)) {
#ifdef CONFIG_ARCH_SUN4I
		if (bright != 0)
			bright += 1;
#endif

#ifdef CONFIG_ARCH_SUN4I
		if (gpanel_info[sel].lcd_pwm_pol == 0)
			duty_ns =
			    (bright *
			     gdisp.pwm[gpanel_info[sel].lcd_pwm_ch].period_ns +
			     128) / 256;
		else
			duty_ns =
			    ((256 -
			      bright) *
			     gdisp.pwm[gpanel_info[sel].lcd_pwm_ch].period_ns +
			     128) / 256;
#else
		if (gpanel_info[sel].lcd_pwm_pol == 0)
			duty_ns =
			    (bright * gdisp.screen[sel].lcd_bright_dimming *
			     gdisp.pwm[gpanel_info[sel].lcd_pwm_ch].period_ns /
			     256 + 128) / 256;
		else
			duty_ns =
			    ((256 -
			      bright * gdisp.screen[sel].lcd_bright_dimming /
			      256) *
			     gdisp.pwm[gpanel_info[sel].lcd_pwm_ch].period_ns +
			     128) / 256;
#endif

		pwm_set_duty_ns(gpanel_info[sel].lcd_pwm_ch, duty_ns);
	}
#ifdef CONFIG_ARCH_SUN5I
	if (!from_iep)
#endif
		gdisp.screen[sel].lcd_bright = bright;

	return DIS_SUCCESS;
}
Ejemplo n.º 5
0
static int ecap_frequency_transition_cb(struct pwm_device *p)
{
	struct ecap_pwm *ep = to_ecap_pwm(p);
	unsigned long duty_ns, rate;

	rate = clk_get_rate(ep->clk);
	if (rate == p->tick_hz)
		return 0;
	p->tick_hz = rate;

	duty_ns = p->duty_ns;
	if (pwm_is_running(p)) {
		pwm_stop(p);
		pwm_set_duty_ns(p, 0);
		pwm_set_period_ns(p, p->period_ns);
		pwm_set_duty_ns(p, duty_ns);
		pwm_start(p);
	} else {
		pwm_set_duty_ns(p, 0);
		pwm_set_period_ns(p, p->period_ns);
		pwm_set_duty_ns(p, duty_ns);
	}
		return 0;
}
Ejemplo n.º 6
0
static int pwm_backlight_suspend(struct platform_device *pdev,
				 pm_message_t state)
{
	struct backlight_device *bl = platform_get_drvdata(pdev);
	struct pwm_bl_data *pb = dev_get_drvdata(&bl->dev);

	if (pb->notify)
		pb->notify(pb->dev, 0);
	pwm_set_duty_ns(pb->pwm, 0);
	if(pb->pwm_started != 0){
		pwm_stop(pb->pwm);
		pb->pwm_started = 0;
	}

	return 0;
}
Ejemplo n.º 7
0
static int pwm_backlight_remove(struct platform_device *pdev)
{
	struct platform_pwm_backlight_data *data = pdev->dev.platform_data;
	struct backlight_device *bl = platform_get_drvdata(pdev);
	struct pwm_bl_data *pb = dev_get_drvdata(&bl->dev);

	backlight_device_unregister(bl);
	pwm_set_duty_ns(pb->pwm, 0);
	pwm_stop(pb->pwm);
	pwm_release(pb->pwm);

	kfree(pb);
	if (data->exit)
		data->exit(&pdev->dev);
	return 0;
}
Ejemplo n.º 8
0
static ssize_t pwm_duty_ns_store(struct device *dev,
                                 struct device_attribute *attr,
                                 const char *buf, size_t len)
{
    unsigned long duty_ns;
    struct pwm_device *p = dev_get_drvdata(dev);
    int ret;

    if (!kstrtoul(buf, 10, &duty_ns)) {
        ret = pwm_set_duty_ns(p, duty_ns);

        if (ret < 0)
            return ret;
    }

    return len;
}
Ejemplo n.º 9
0
//setting:  0,       1,      2,....  255,   256
//pol==0:  0,       1,      2,....  255,   256
//pol==1: 256,    255,    254, ...   1,   0
__s32 BSP_disp_lcd_set_bright(__u32 sel, __u32  bright)
{
    __u32 duty_ns;

    if((OSAL_sw_get_ic_ver() != 0xA) && (gpanel_info[sel].lcd_pwm_not_used == 0))
    {
        if(gpanel_info[sel].lcd_pwm_pol == 0)
        {
            duty_ns = (bright * gdisp.pwm[gpanel_info[sel].lcd_pwm_ch].period_ns + 128) / 256;
        }
        else
        {
            duty_ns = ((256- bright) * gdisp.pwm[gpanel_info[sel].lcd_pwm_ch].period_ns + 128) / 256;
        }
        pwm_set_duty_ns(gpanel_info[sel].lcd_pwm_ch, duty_ns);
    }
    gdisp.screen[sel].lcd_bright = bright;

    return DIS_SUCCESS;
}