media: mediatek: vcodec: align fw interface
Align scp and vpu firmware interface, remove the depedency for 'struct mtk_vcodec_dev' and 'struct mtk_vcodec_ctx'. It will be much easier to separate video encoder and decoder. Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
94f214f4b6
commit
2e9eadccf7
@ -5,15 +5,14 @@
|
||||
#include "mtk_vcodec_util.h"
|
||||
#include "mtk_vcodec_drv.h"
|
||||
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_select(struct mtk_vcodec_dev *dev,
|
||||
enum mtk_vcodec_fw_type type,
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_select(void *priv, enum mtk_vcodec_fw_type type,
|
||||
enum mtk_vcodec_fw_use fw_use)
|
||||
{
|
||||
switch (type) {
|
||||
case VPU:
|
||||
return mtk_vcodec_fw_vpu_init(dev, fw_use);
|
||||
return mtk_vcodec_fw_vpu_init(priv, fw_use);
|
||||
case SCP:
|
||||
return mtk_vcodec_fw_scp_init(dev);
|
||||
return mtk_vcodec_fw_scp_init(priv, fw_use);
|
||||
default:
|
||||
mtk_v4l2_err("invalid vcodec fw type");
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
@ -25,8 +25,7 @@ struct mtk_vcodec_fw;
|
||||
typedef void (*mtk_vcodec_ipi_handler) (void *data,
|
||||
unsigned int len, void *priv);
|
||||
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_select(struct mtk_vcodec_dev *dev,
|
||||
enum mtk_vcodec_fw_type type,
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_select(void *priv, enum mtk_vcodec_fw_type type,
|
||||
enum mtk_vcodec_fw_use fw_use);
|
||||
void mtk_vcodec_fw_release(struct mtk_vcodec_fw *fw);
|
||||
|
||||
|
@ -12,6 +12,7 @@ struct mtk_vcodec_fw {
|
||||
const struct mtk_vcodec_fw_ops *ops;
|
||||
struct platform_device *pdev;
|
||||
struct mtk_scp *scp;
|
||||
enum mtk_vcodec_fw_use fw_use;
|
||||
};
|
||||
|
||||
struct mtk_vcodec_fw_ops {
|
||||
@ -28,22 +29,20 @@ struct mtk_vcodec_fw_ops {
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_VIDEO_MEDIATEK_VCODEC_VPU)
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev,
|
||||
enum mtk_vcodec_fw_use fw_use);
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(void *priv, enum mtk_vcodec_fw_use fw_use);
|
||||
#else
|
||||
static inline struct mtk_vcodec_fw *
|
||||
mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev,
|
||||
enum mtk_vcodec_fw_use fw_use)
|
||||
mtk_vcodec_fw_vpu_init(void *priv, enum mtk_vcodec_fw_use fw_use)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
#endif /* CONFIG_VIDEO_MEDIATEK_VCODEC_VPU */
|
||||
|
||||
#if IS_ENABLED(CONFIG_VIDEO_MEDIATEK_VCODEC_SCP)
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(struct mtk_vcodec_dev *dev);
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(void *priv, enum mtk_vcodec_fw_use fw_use);
|
||||
#else
|
||||
static inline struct mtk_vcodec_fw *
|
||||
mtk_vcodec_fw_scp_init(struct mtk_vcodec_dev *dev)
|
||||
mtk_vcodec_fw_scp_init(void *priv, enum mtk_vcodec_fw_use fw_use)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
@ -53,18 +53,21 @@ static const struct mtk_vcodec_fw_ops mtk_vcodec_rproc_msg = {
|
||||
.release = mtk_vcodec_scp_release,
|
||||
};
|
||||
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(struct mtk_vcodec_dev *dev)
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(void *priv, enum mtk_vcodec_fw_use fw_use)
|
||||
{
|
||||
struct mtk_vcodec_fw *fw;
|
||||
struct mtk_vcodec_dev *dev = priv;
|
||||
struct platform_device *plat_dev;
|
||||
struct mtk_scp *scp;
|
||||
|
||||
scp = scp_get(dev->plat_dev);
|
||||
plat_dev = dev->plat_dev;
|
||||
scp = scp_get(plat_dev);
|
||||
if (!scp) {
|
||||
mtk_v4l2_err("could not get vdec scp handle");
|
||||
return ERR_PTR(-EPROBE_DEFER);
|
||||
}
|
||||
|
||||
fw = devm_kzalloc(&dev->plat_dev->dev, sizeof(*fw), GFP_KERNEL);
|
||||
fw = devm_kzalloc(&plat_dev->dev, sizeof(*fw), GFP_KERNEL);
|
||||
fw->type = SCP;
|
||||
fw->ops = &mtk_vcodec_rproc_msg;
|
||||
fw->scp = scp;
|
||||
|
@ -77,10 +77,11 @@ static const struct mtk_vcodec_fw_ops mtk_vcodec_vpu_msg = {
|
||||
.release = mtk_vcodec_vpu_release,
|
||||
};
|
||||
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev,
|
||||
enum mtk_vcodec_fw_use fw_use)
|
||||
struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(void *priv, enum mtk_vcodec_fw_use fw_use)
|
||||
{
|
||||
struct platform_device *fw_pdev;
|
||||
struct mtk_vcodec_dev *dev = priv;
|
||||
struct platform_device *plat_dev;
|
||||
struct mtk_vcodec_fw *fw;
|
||||
enum rst_id rst_id;
|
||||
|
||||
@ -94,19 +95,22 @@ struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev,
|
||||
break;
|
||||
}
|
||||
|
||||
fw_pdev = vpu_get_plat_device(dev->plat_dev);
|
||||
plat_dev = dev->plat_dev;
|
||||
fw_pdev = vpu_get_plat_device(plat_dev);
|
||||
if (!fw_pdev) {
|
||||
mtk_v4l2_err("firmware device is not ready");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
vpu_wdt_reg_handler(fw_pdev, mtk_vcodec_vpu_reset_handler, dev, rst_id);
|
||||
|
||||
fw = devm_kzalloc(&dev->plat_dev->dev, sizeof(*fw), GFP_KERNEL);
|
||||
fw = devm_kzalloc(&plat_dev->dev, sizeof(*fw), GFP_KERNEL);
|
||||
if (!fw)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
fw->type = VPU;
|
||||
fw->ops = &mtk_vcodec_vpu_msg;
|
||||
fw->pdev = fw_pdev;
|
||||
fw->fw_use = fw_use;
|
||||
|
||||
return fw;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user