lkml.org 
[lkml]   [2021]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 16/18] auxdisplay: ht16k33: Extract frame buffer probing
    Date
    Extract all frame buffer (including backlight) probing into
    ht16k33_fbdev_probe().

    Call ht16k33_fbdev_probe() after ht16k33_keypad_probe(), as the latter
    does not need any manual cleanup in the probe error path.

    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    ---
    v2:
    - Rebased.
    ---
    drivers/auxdisplay/ht16k33.c | 98 +++++++++++++++++++-----------------
    1 file changed, 53 insertions(+), 45 deletions(-)

    diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
    index ed5aab2627e028ed..af7489acfacbd409 100644
    --- a/drivers/auxdisplay/ht16k33.c
    +++ b/drivers/auxdisplay/ht16k33.c
    @@ -394,33 +394,15 @@ static int ht16k33_keypad_probe(struct i2c_client *client,
    return input_register_device(keypad->dev);
    }

    -static int ht16k33_probe(struct i2c_client *client)
    +static int ht16k33_fbdev_probe(struct i2c_client *client,
    + struct ht16k33_priv *priv, uint32_t brightness)
    {
    - int err;
    - uint32_t dft_brightness;
    - struct backlight_device *bl;
    - struct backlight_properties bl_props;
    - struct ht16k33_priv *priv;
    - struct ht16k33_fbdev *fbdev;
    struct device *dev = &client->dev;
    + struct ht16k33_fbdev *fbdev = &priv->fbdev;
    struct device_node *node = dev->of_node;
    -
    - if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
    - dev_err(dev, "i2c_check_functionality error\n");
    - return -EIO;
    - }
    -
    - priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
    - if (!priv)
    - return -ENOMEM;
    -
    - priv->client = client;
    - i2c_set_clientdata(client, priv);
    - fbdev = &priv->fbdev;
    -
    - err = ht16k33_initialize(priv);
    - if (err)
    - return err;
    + struct backlight_properties bl_props;
    + struct backlight_device *bl;
    + int err;

    /* Backlight */
    memset(&bl_props, 0, sizeof(struct backlight_properties));
    @@ -434,18 +416,7 @@ static int ht16k33_probe(struct i2c_client *client)
    return PTR_ERR(bl);
    }

    - err = of_property_read_u32(node, "default-brightness-level",
    - &dft_brightness);
    - if (err) {
    - dft_brightness = MAX_BRIGHTNESS;
    - } else if (dft_brightness > MAX_BRIGHTNESS) {
    - dev_warn(dev,
    - "invalid default brightness level: %u, using %u\n",
    - dft_brightness, MAX_BRIGHTNESS);
    - dft_brightness = MAX_BRIGHTNESS;
    - }
    -
    - bl->props.brightness = dft_brightness;
    + bl->props.brightness = brightness;
    ht16k33_bl_update_status(bl);

    /* Framebuffer (2 bytes per column) */
    @@ -489,18 +460,9 @@ static int ht16k33_probe(struct i2c_client *client)
    if (err)
    goto err_fbdev_info;

    - /* Keypad */
    - if (client->irq > 0) {
    - err = ht16k33_keypad_probe(client, &priv->keypad);
    - if (err)
    - goto err_fbdev_unregister;
    - }
    -
    ht16k33_fb_queue(priv);
    return 0;

    -err_fbdev_unregister:
    - unregister_framebuffer(fbdev->info);
    err_fbdev_info:
    framebuffer_release(fbdev->info);
    err_fbdev_buffer:
    @@ -509,6 +471,52 @@ static int ht16k33_probe(struct i2c_client *client)
    return err;
    }

    +static int ht16k33_probe(struct i2c_client *client)
    +{
    + struct device *dev = &client->dev;
    + struct device_node *node = dev->of_node;
    + struct ht16k33_priv *priv;
    + uint32_t dft_brightness;
    + int err;
    +
    + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
    + dev_err(dev, "i2c_check_functionality error\n");
    + return -EIO;
    + }
    +
    + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
    + if (!priv)
    + return -ENOMEM;
    +
    + priv->client = client;
    + i2c_set_clientdata(client, priv);
    +
    + err = ht16k33_initialize(priv);
    + if (err)
    + return err;
    +
    + err = of_property_read_u32(node, "default-brightness-level",
    + &dft_brightness);
    + if (err) {
    + dft_brightness = MAX_BRIGHTNESS;
    + } else if (dft_brightness > MAX_BRIGHTNESS) {
    + dev_warn(dev,
    + "invalid default brightness level: %u, using %u\n",
    + dft_brightness, MAX_BRIGHTNESS);
    + dft_brightness = MAX_BRIGHTNESS;
    + }
    +
    + /* Keypad */
    + if (client->irq > 0) {
    + err = ht16k33_keypad_probe(client, &priv->keypad);
    + if (err)
    + return err;
    + }
    +
    + /* Frame Buffer Display */
    + return ht16k33_fbdev_probe(client, priv, dft_brightness);
    +}
    +
    static int ht16k33_remove(struct i2c_client *client)
    {
    struct ht16k33_priv *priv = i2c_get_clientdata(client);
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-06-25 15:01    [W:4.459 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site