Lines Matching refs:sc

75 static int pwm_backlight_find_level_per_percent(struct pwm_backlight_softc *sc, int percent);
96 struct pwm_backlight_softc *sc;
100 sc = device_get_softc(dev);
103 rv = pwm_get_by_ofw_propidx(dev, node, "pwms", 0, &sc->channel);
110 &sc->power_supply) != 0) {
116 sc->nlevels = OF_getencprop_alloc(node, "brightness-levels",
117 (void **)&sc->levels);
118 if (sc->nlevels <= 0) {
122 sc->nlevels /= sizeof(uint32_t);
125 &sc->default_level, sizeof(uint32_t)) <= 0) {
129 if (sc->default_level > sc->nlevels) {
133 sc->channel->duty = sc->channel->period * sc->levels[sc->default_level] / 100;
137 device_printf(dev, "Number of levels: %zd\n", sc->nlevels);
138 device_printf(dev, "Configured period time: %ju\n", (uintmax_t)sc->channel->period);
139 device_printf(dev, "Default duty cycle: %ju\n", (uintmax_t)sc->channel->duty);
143 PWMBUS_CHANNEL_GET_CONFIG(sc->channel->dev,
144 sc->channel->channel,
145 (unsigned int *)&sc->channel->period,
146 (unsigned int *)&sc->channel->duty);
147 if (sc->channel->duty > sc->channel->period)
148 sc->channel->duty = sc->channel->period;
150 device_printf(dev, "Configured period time: %ju\n", (uintmax_t)sc->channel->period);
151 device_printf(dev, "Default duty cycle: %ju\n", (uintmax_t)sc->channel->duty);
155 regulator_enable(sc->power_supply);
156 sc->channel->enabled = true;
157 PWMBUS_CHANNEL_CONFIG(sc->channel->dev, sc->channel->channel,
158 sc->channel->period, sc->channel->duty);
159 PWMBUS_CHANNEL_ENABLE(sc->channel->dev, sc->channel->channel,
160 sc->channel->enabled);
162 sc->current_level = pwm_backlight_find_level_per_percent(sc,
163 sc->channel->period / sc->channel->duty);
164 sc->cdev = backlight_register("pwm_backlight", dev);
165 if (sc->cdev == NULL)
174 struct pwm_backlight_softc *sc;
176 sc = device_get_softc(dev);
177 if (sc->nlevels > 0)
178 OF_prop_free(sc->levels);
179 regulator_disable(sc->power_supply);
180 backlight_destroy(sc->cdev);
185 pwm_backlight_find_level_per_percent(struct pwm_backlight_softc *sc, int percent)
193 for (i = 0, diff = 0; i < sc->nlevels; i++) {
194 if (sc->levels[i] == percent)
196 else if (sc->levels[i] < percent)
197 diff = percent - sc->levels[i];
199 if (diff < abs((percent - sc->levels[i])))
212 struct pwm_backlight_softc *sc;
216 sc = device_get_softc(dev);
218 if (sc->nlevels != 0) {
219 error = pwm_backlight_find_level_per_percent(sc,
223 sc->current_level = error;
224 sc->channel->duty = sc->channel->period *
225 sc->levels[sc->current_level] / 100;
229 sc->channel->duty = sc->channel->period *
232 sc->channel->enabled = true;
233 PWMBUS_CHANNEL_CONFIG(sc->channel->dev, sc->channel->channel,
234 sc->channel->period, sc->channel->duty);
235 PWMBUS_CHANNEL_ENABLE(sc->channel->dev, sc->channel->channel,
236 sc->channel->enabled);
237 error = regulator_status(sc->power_supply, &reg_status);
244 regulator_enable(sc->power_supply);
247 regulator_disable(sc->power_supply);
257 struct pwm_backlight_softc *sc;
260 sc = device_get_softc(dev);
262 if (sc->nlevels != 0) {
263 props->brightness = sc->levels[sc->current_level];
264 props->nlevels = sc->nlevels;
265 for (i = 0; i < sc->nlevels; i++)
266 props->levels[i] = sc->levels[i];
268 props->brightness = sc->channel->duty * 100 / sc->channel->period;