Lines Matching +full:7 +full:inch +full:- +full:touchscreen +full:- +full:panel +full:- +full:regulator
1 // SPDX-License-Identifier: GPL-2.0
18 #include <linux/regulator/driver.h>
19 #include <linux/regulator/machine.h>
20 #include <linux/regulator/of_regulator.h>
42 #define PB_LCD_MAIN BIT(7)
85 state->port_states[reg - REG_PORTA] = val; in attiny_set_port_state()
86 return regmap_write(state->regmap, reg, val); in attiny_set_port_state()
91 return state->port_states[reg - REG_PORTA]; in attiny_get_port_state()
98 guard(mutex)(&state->lock); in attiny_lcd_power_enable()
105 * firmware used for the panel. Runtime rotation in attiny_lcd_power_enable()
111 /* Main regulator on, and power to the panel (LCD_VCC_N) */ in attiny_lcd_power_enable()
126 guard(mutex)(&state->lock); in attiny_lcd_power_disable()
128 regmap_write(rdev->regmap, REG_PWM, 0); in attiny_lcd_power_disable()
147 scoped_guard(mutex, &state->lock) { in attiny_lcd_power_is_enabled()
149 ret = regmap_read(rdev->regmap, REG_PORTC, &data); in attiny_lcd_power_is_enabled()
175 .name = "tc358762-power",
184 struct regmap *regmap = state->regmap; in attiny_update_status()
188 guard(mutex)(&state->lock); in attiny_update_status()
213 guard(mutex)(&state->lock); in attiny_gpio_set()
225 regmap_write(state->regmap, REG_ADDR_H, 0x04); in attiny_gpio_set()
227 regmap_write(state->regmap, REG_ADDR_L, 0x7c); in attiny_gpio_set()
229 regmap_write(state->regmap, REG_WRITE_DATA_H, 0x00); in attiny_gpio_set()
231 regmap_write(state->regmap, REG_WRITE_DATA_L, 0x00); in attiny_gpio_set()
247 msgs[0].addr = client->addr; in attiny_i2c_read()
252 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in attiny_i2c_read()
254 return -EIO; in attiny_i2c_read()
259 msgs[0].addr = client->addr; in attiny_i2c_read()
264 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in attiny_i2c_read()
266 return -EIO; in attiny_i2c_read()
286 state = devm_kzalloc(&i2c->dev, sizeof(*state), GFP_KERNEL); in attiny_i2c_probe()
288 return -ENOMEM; in attiny_i2c_probe()
290 ret = devm_mutex_init(&i2c->dev, &state->lock); in attiny_i2c_probe()
299 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in attiny_i2c_probe()
306 dev_err(&i2c->dev, "Failed to read REG_ID reg: %d\n", ret); in attiny_i2c_probe()
315 dev_err(&i2c->dev, "Unknown Atmel firmware revision: 0x%02x\n", data); in attiny_i2c_probe()
316 return -ENODEV; in attiny_i2c_probe()
323 config.dev = &i2c->dev; in attiny_i2c_probe()
325 config.of_node = i2c->dev.of_node; in attiny_i2c_probe()
329 rdev = devm_regulator_register(&i2c->dev, &attiny_regulator, &config); in attiny_i2c_probe()
331 dev_err(&i2c->dev, "Failed to register ATTINY regulator\n"); in attiny_i2c_probe()
338 state->regmap = regmap; in attiny_i2c_probe()
340 bl = devm_backlight_device_register(&i2c->dev, dev_name(&i2c->dev), in attiny_i2c_probe()
341 &i2c->dev, state, &attiny_bl, in attiny_i2c_probe()
346 bl->props.brightness = 0xff; in attiny_i2c_probe()
348 state->gc.parent = &i2c->dev; in attiny_i2c_probe()
349 state->gc.label = i2c->name; in attiny_i2c_probe()
350 state->gc.owner = THIS_MODULE; in attiny_i2c_probe()
351 state->gc.base = -1; in attiny_i2c_probe()
352 state->gc.ngpio = NUM_GPIO; in attiny_i2c_probe()
354 state->gc.set = attiny_gpio_set; in attiny_i2c_probe()
355 state->gc.get_direction = attiny_gpio_get_direction; in attiny_i2c_probe()
356 state->gc.can_sleep = true; in attiny_i2c_probe()
358 ret = devm_gpiochip_add_data(&i2c->dev, &state->gc, state); in attiny_i2c_probe()
360 dev_err(&i2c->dev, "Failed to create gpiochip: %d\n", ret); in attiny_i2c_probe()
366 { .compatible = "raspberrypi,7inch-touchscreen-panel-regulator" },
383 MODULE_DESCRIPTION("Regulator device driver for Raspberry Pi 7-inch touchscreen");