mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
media: chips-media: wave5: support reset lines
Add initial support for optional reset lines. For now, simply deassert resets while probing the driver and assert them back when removing the driver. Signed-off-by: Ivan Bornyakov <brnkv.i1@gmail.com> Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
143e7ab4d9
commit
2b9188426b
|
|
@ -10,6 +10,7 @@
|
|||
#include <linux/clk.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/reset.h>
|
||||
#include "wave5-vpu.h"
|
||||
#include "wave5-regdefine.h"
|
||||
#include "wave5-vpuconfig.h"
|
||||
|
|
@ -179,6 +180,16 @@ static int wave5_vpu_probe(struct platform_device *pdev)
|
|||
dev_set_drvdata(&pdev->dev, dev);
|
||||
dev->dev = &pdev->dev;
|
||||
|
||||
dev->resets = devm_reset_control_array_get_optional_exclusive(&pdev->dev);
|
||||
if (IS_ERR(dev->resets)) {
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(dev->resets),
|
||||
"Failed to get reset control\n");
|
||||
}
|
||||
|
||||
ret = reset_control_deassert(dev->resets);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret, "Failed to deassert resets\n");
|
||||
|
||||
ret = devm_clk_bulk_get_all(&pdev->dev, &dev->clks);
|
||||
|
||||
/* continue without clock, assume externally managed */
|
||||
|
|
@ -191,7 +202,7 @@ static int wave5_vpu_probe(struct platform_device *pdev)
|
|||
ret = clk_bulk_prepare_enable(dev->num_clks, dev->clks);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Enabling clocks, fail: %d\n", ret);
|
||||
return ret;
|
||||
goto err_reset_assert;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(pdev->dev.of_node, "sram-size",
|
||||
|
|
@ -282,6 +293,8 @@ static int wave5_vpu_probe(struct platform_device *pdev)
|
|||
wave5_vdi_release(&pdev->dev);
|
||||
err_clk_dis:
|
||||
clk_bulk_disable_unprepare(dev->num_clks, dev->clks);
|
||||
err_reset_assert:
|
||||
reset_control_assert(dev->resets);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -297,6 +310,7 @@ static void wave5_vpu_remove(struct platform_device *pdev)
|
|||
|
||||
mutex_destroy(&dev->dev_lock);
|
||||
mutex_destroy(&dev->hw_lock);
|
||||
reset_control_assert(dev->resets);
|
||||
clk_bulk_disable_unprepare(dev->num_clks, dev->clks);
|
||||
wave5_vpu_enc_unregister_device(dev);
|
||||
wave5_vpu_dec_unregister_device(dev);
|
||||
|
|
|
|||
|
|
@ -762,6 +762,7 @@ struct vpu_device {
|
|||
struct kthread_worker *worker;
|
||||
int vpu_poll_interval;
|
||||
int num_clks;
|
||||
struct reset_control *resets;
|
||||
};
|
||||
|
||||
struct vpu_instance;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user