mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
auxdisplay: ht16k33: Make use of device properties
The device property API allows drivers to gather device resources from different sources, such as ACPI, and lift the dependency on Device Tree. Convert the driver to unleash the power of the device property API. Suggested-by: Marek Behún <kabel@kernel.org> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Acked-by: Robin van der Gracht <robin@protonic.nl> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
c223d9c636
commit
5d343f7c45
2 changed files with 13 additions and 16 deletions
|
@ -169,7 +169,7 @@ config IMG_ASCII_LCD
|
||||||
|
|
||||||
config HT16K33
|
config HT16K33
|
||||||
tristate "Holtek Ht16K33 LED controller with keyscan"
|
tristate "Holtek Ht16K33 LED controller with keyscan"
|
||||||
depends on FB && OF && I2C && INPUT
|
depends on FB && I2C && INPUT
|
||||||
select FB_SYS_FOPS
|
select FB_SYS_FOPS
|
||||||
select FB_SYS_FILLRECT
|
select FB_SYS_FILLRECT
|
||||||
select FB_SYS_COPYAREA
|
select FB_SYS_COPYAREA
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/of.h>
|
#include <linux/property.h>
|
||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/backlight.h>
|
#include <linux/backlight.h>
|
||||||
|
@ -491,15 +491,13 @@ static int ht16k33_led_probe(struct device *dev, struct led_classdev *led,
|
||||||
unsigned int brightness)
|
unsigned int brightness)
|
||||||
{
|
{
|
||||||
struct led_init_data init_data = {};
|
struct led_init_data init_data = {};
|
||||||
struct device_node *node;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* The LED is optional */
|
/* The LED is optional */
|
||||||
node = of_get_child_by_name(dev->of_node, "led");
|
init_data.fwnode = device_get_named_child_node(dev, "led");
|
||||||
if (!node)
|
if (!init_data.fwnode)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
init_data.fwnode = of_fwnode_handle(node);
|
|
||||||
init_data.devicename = "auxdisplay";
|
init_data.devicename = "auxdisplay";
|
||||||
init_data.devname_mandatory = true;
|
init_data.devname_mandatory = true;
|
||||||
|
|
||||||
|
@ -520,7 +518,6 @@ static int ht16k33_keypad_probe(struct i2c_client *client,
|
||||||
struct ht16k33_keypad *keypad)
|
struct ht16k33_keypad *keypad)
|
||||||
{
|
{
|
||||||
struct device *dev = &client->dev;
|
struct device *dev = &client->dev;
|
||||||
struct device_node *node = dev->of_node;
|
|
||||||
u32 rows = HT16K33_MATRIX_KEYPAD_MAX_ROWS;
|
u32 rows = HT16K33_MATRIX_KEYPAD_MAX_ROWS;
|
||||||
u32 cols = HT16K33_MATRIX_KEYPAD_MAX_COLS;
|
u32 cols = HT16K33_MATRIX_KEYPAD_MAX_COLS;
|
||||||
int err;
|
int err;
|
||||||
|
@ -539,17 +536,17 @@ static int ht16k33_keypad_probe(struct i2c_client *client,
|
||||||
keypad->dev->open = ht16k33_keypad_start;
|
keypad->dev->open = ht16k33_keypad_start;
|
||||||
keypad->dev->close = ht16k33_keypad_stop;
|
keypad->dev->close = ht16k33_keypad_stop;
|
||||||
|
|
||||||
if (!of_get_property(node, "linux,no-autorepeat", NULL))
|
if (!device_property_read_bool(dev, "linux,no-autorepeat"))
|
||||||
__set_bit(EV_REP, keypad->dev->evbit);
|
__set_bit(EV_REP, keypad->dev->evbit);
|
||||||
|
|
||||||
err = of_property_read_u32(node, "debounce-delay-ms",
|
err = device_property_read_u32(dev, "debounce-delay-ms",
|
||||||
&keypad->debounce_ms);
|
&keypad->debounce_ms);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(dev, "key debounce delay not specified\n");
|
dev_err(dev, "key debounce delay not specified\n");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = matrix_keypad_parse_of_params(dev, &rows, &cols);
|
err = matrix_keypad_parse_properties(dev, &rows, &cols);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
if (rows > HT16K33_MATRIX_KEYPAD_MAX_ROWS ||
|
if (rows > HT16K33_MATRIX_KEYPAD_MAX_ROWS ||
|
||||||
|
@ -634,8 +631,8 @@ static int ht16k33_fbdev_probe(struct device *dev, struct ht16k33_priv *priv,
|
||||||
goto err_fbdev_buffer;
|
goto err_fbdev_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = of_property_read_u32(dev->of_node, "refresh-rate-hz",
|
err = device_property_read_u32(dev, "refresh-rate-hz",
|
||||||
&fbdev->refresh_rate);
|
&fbdev->refresh_rate);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(dev, "refresh rate not specified\n");
|
dev_err(dev, "refresh rate not specified\n");
|
||||||
goto err_fbdev_info;
|
goto err_fbdev_info;
|
||||||
|
@ -741,8 +738,8 @@ static int ht16k33_probe(struct i2c_client *client)
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = of_property_read_u32(dev->of_node, "default-brightness-level",
|
err = device_property_read_u32(dev, "default-brightness-level",
|
||||||
&dft_brightness);
|
&dft_brightness);
|
||||||
if (err) {
|
if (err) {
|
||||||
dft_brightness = MAX_BRIGHTNESS;
|
dft_brightness = MAX_BRIGHTNESS;
|
||||||
} else if (dft_brightness > MAX_BRIGHTNESS) {
|
} else if (dft_brightness > MAX_BRIGHTNESS) {
|
||||||
|
@ -830,7 +827,7 @@ static struct i2c_driver ht16k33_driver = {
|
||||||
.remove = ht16k33_remove,
|
.remove = ht16k33_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = DRIVER_NAME,
|
.name = DRIVER_NAME,
|
||||||
.of_match_table = of_match_ptr(ht16k33_of_match),
|
.of_match_table = ht16k33_of_match,
|
||||||
},
|
},
|
||||||
.id_table = ht16k33_i2c_match,
|
.id_table = ht16k33_i2c_match,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue