lkml.org 
[lkml]   [2020]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 02/11] firmware: raspberrypi: Introduce devm_rpi_firmware_get()
    Date
    It'll simplify the firmware handling for most consumers.

    Suggested-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
    Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
    ---

    Changes since v4:
    - Rearrange function calls for clarity, same functionality

    Changes since v2:
    - Create devm_rpi_firmware_get()

    drivers/firmware/raspberrypi.c | 29 ++++++++++++++++++++++
    include/soc/bcm2835/raspberrypi-firmware.h | 8 ++++++
    2 files changed, 37 insertions(+)

    diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
    index ed793aef7851..e2a5f6f59357 100644
    --- a/drivers/firmware/raspberrypi.c
    +++ b/drivers/firmware/raspberrypi.c
    @@ -243,6 +243,13 @@ void rpi_firmware_put(struct rpi_firmware *fw)
    }
    EXPORT_SYMBOL_GPL(rpi_firmware_put);

    +static void devm_rpi_firmware_put(void *data)
    +{
    + struct rpi_firmware *fw = data;
    +
    + rpi_firmware_put(fw);
    +}
    +
    static int rpi_firmware_probe(struct platform_device *pdev)
    {
    struct device *dev = &pdev->dev;
    @@ -326,6 +333,28 @@ struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node)
    }
    EXPORT_SYMBOL_GPL(rpi_firmware_get);

    +/**
    + * devm_rpi_firmware_get - Get pointer to rpi_firmware structure.
    + * @firmware_node: Pointer to the firmware Device Tree node.
    + *
    + * Returns NULL is the firmware device is not ready.
    + */
    +struct rpi_firmware *devm_rpi_firmware_get(struct device *dev,
    + struct device_node *firmware_node)
    +{
    + struct rpi_firmware *fw;
    +
    + fw = rpi_firmware_get(firmware_node);
    + if (!fw)
    + return NULL;
    +
    + if (devm_add_action_or_reset(dev, devm_rpi_firmware_put, fw))
    + return NULL;
    +
    + return fw;
    +}
    +EXPORT_SYMBOL_GPL(devm_rpi_firmware_get);
    +
    static const struct of_device_id rpi_firmware_of_match[] = {
    { .compatible = "raspberrypi,bcm2835-firmware", },
    {},
    diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
    index fdfef7fe40df..73ad784fca96 100644
    --- a/include/soc/bcm2835/raspberrypi-firmware.h
    +++ b/include/soc/bcm2835/raspberrypi-firmware.h
    @@ -142,6 +142,8 @@ int rpi_firmware_property_list(struct rpi_firmware *fw,
    void *data, size_t tag_size);
    void rpi_firmware_put(struct rpi_firmware *fw);
    struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node);
    +struct rpi_firmware *devm_rpi_firmware_get(struct device *dev,
    + struct device_node *firmware_node);
    #else
    static inline int rpi_firmware_property(struct rpi_firmware *fw, u32 tag,
    void *data, size_t len)
    @@ -160,6 +162,12 @@ static inline struct rpi_firmware *rpi_firmware_get(struct device_node *firmware
    {
    return NULL;
    }
    +
    +static inline struct rpi_firmware *devm_rpi_firmware_get(struct device *dev,
    + struct device_node *firmware_node)
    +{
    + return NULL;
    +}
    #endif

    #endif /* __SOC_RASPBERRY_FIRMWARE_H__ */
    --
    2.29.2
    \
     
     \ /
      Last update: 2020-11-23 19:44    [W:4.027 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site