mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
media: s5p-mfc: drop static device variable in s5p_mfc_pm.c
Change the interface of power management functions in s5p_mfc_pm.c to accept the pointer to S5P MFC device structure. instead of relying on file-scope static variable. This makes code easier to read and modify in case more devices are added. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Reviewed-by: Aakarsh Jain <aakarsh.jain@samsung.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
9e1b5ab821
commit
c007ae835d
|
|
@ -183,7 +183,7 @@ static void s5p_mfc_watchdog_worker(struct work_struct *work)
|
|||
mfc_err("Error: some instance may be closing/opening\n");
|
||||
spin_lock_irqsave(&dev->irqlock, flags);
|
||||
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
|
||||
for (i = 0; i < MFC_NUM_CONTEXTS; i++) {
|
||||
ctx = dev->ctx[i];
|
||||
|
|
@ -211,9 +211,9 @@ static void s5p_mfc_watchdog_worker(struct work_struct *work)
|
|||
mfc_err("Failed to reload FW\n");
|
||||
goto unlock;
|
||||
}
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
ret = s5p_mfc_init_hw(dev);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
if (ret)
|
||||
mfc_err("Failed to reinit FW\n");
|
||||
}
|
||||
|
|
@ -393,7 +393,7 @@ static void s5p_mfc_handle_frame(struct s5p_mfc_ctx *ctx,
|
|||
s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
|
||||
wake_up_ctx(ctx, reason, err);
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
|
||||
return;
|
||||
}
|
||||
|
|
@ -465,7 +465,7 @@ static void s5p_mfc_handle_frame(struct s5p_mfc_ctx *ctx,
|
|||
s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
|
||||
wake_up_ctx(ctx, reason, err);
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
/* if suspending, wake up device and do not try_run again*/
|
||||
if (test_bit(0, &dev->enter_suspend))
|
||||
wake_up_dev(dev, reason, err);
|
||||
|
|
@ -509,7 +509,7 @@ static void s5p_mfc_handle_error(struct s5p_mfc_dev *dev,
|
|||
}
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
wake_up_dev(dev, reason, err);
|
||||
}
|
||||
|
||||
|
|
@ -565,7 +565,7 @@ static void s5p_mfc_handle_seq_done(struct s5p_mfc_ctx *ctx,
|
|||
s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
|
||||
clear_work_bit(ctx);
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
|
||||
wake_up_ctx(ctx, reason, err);
|
||||
}
|
||||
|
|
@ -601,7 +601,7 @@ static void s5p_mfc_handle_init_buffers(struct s5p_mfc_ctx *ctx,
|
|||
}
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
|
||||
wake_up(&ctx->queue);
|
||||
if (ctx->src_queue_cnt >= 1 && ctx->dst_queue_cnt >= 1)
|
||||
|
|
@ -610,7 +610,7 @@ static void s5p_mfc_handle_init_buffers(struct s5p_mfc_ctx *ctx,
|
|||
} else {
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
|
||||
wake_up(&ctx->queue);
|
||||
}
|
||||
|
|
@ -638,7 +638,7 @@ static void s5p_mfc_handle_stream_complete(struct s5p_mfc_ctx *ctx)
|
|||
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
wake_up(&ctx->queue);
|
||||
s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
|
||||
}
|
||||
|
|
@ -690,7 +690,7 @@ static irqreturn_t s5p_mfc_irq(int irq, void *priv)
|
|||
}
|
||||
s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
|
||||
WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
wake_up_ctx(ctx, reason, err);
|
||||
s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
|
||||
} else {
|
||||
|
|
@ -754,7 +754,7 @@ static irqreturn_t s5p_mfc_irq(int irq, void *priv)
|
|||
if (test_and_clear_bit(0, &dev->hw_lock) == 0)
|
||||
mfc_err("Failed to unlock hw\n");
|
||||
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
clear_work_bit(ctx);
|
||||
wake_up(&ctx->queue);
|
||||
|
||||
|
|
@ -841,20 +841,20 @@ static int s5p_mfc_open(struct file *file)
|
|||
dev->watchdog_timer.expires = jiffies +
|
||||
msecs_to_jiffies(MFC_WATCHDOG_INTERVAL);
|
||||
add_timer(&dev->watchdog_timer);
|
||||
ret = s5p_mfc_power_on();
|
||||
ret = s5p_mfc_power_on(dev);
|
||||
if (ret < 0) {
|
||||
mfc_err("power on failed\n");
|
||||
goto err_pwr_enable;
|
||||
}
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
ret = s5p_mfc_load_firmware(dev);
|
||||
if (ret) {
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
goto err_load_fw;
|
||||
}
|
||||
/* Init the FW */
|
||||
ret = s5p_mfc_init_hw(dev);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
if (ret)
|
||||
goto err_init_hw;
|
||||
}
|
||||
|
|
@ -931,7 +931,7 @@ static int s5p_mfc_open(struct file *file)
|
|||
err_load_fw:
|
||||
err_pwr_enable:
|
||||
if (dev->num_inst == 1) {
|
||||
if (s5p_mfc_power_off() < 0)
|
||||
if (s5p_mfc_power_off(dev) < 0)
|
||||
mfc_err("power off failed\n");
|
||||
del_timer_sync(&dev->watchdog_timer);
|
||||
}
|
||||
|
|
@ -963,7 +963,7 @@ static int s5p_mfc_release(struct file *file)
|
|||
vb2_queue_release(&ctx->vq_src);
|
||||
vb2_queue_release(&ctx->vq_dst);
|
||||
if (dev) {
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
|
||||
/* Mark context as idle */
|
||||
clear_work_bit_irqsave(ctx);
|
||||
|
|
@ -983,12 +983,12 @@ static int s5p_mfc_release(struct file *file)
|
|||
mfc_debug(2, "Last instance\n");
|
||||
s5p_mfc_deinit_hw(dev);
|
||||
del_timer_sync(&dev->watchdog_timer);
|
||||
s5p_mfc_clock_off();
|
||||
if (s5p_mfc_power_off() < 0)
|
||||
s5p_mfc_clock_off(dev);
|
||||
if (s5p_mfc_power_off(dev) < 0)
|
||||
mfc_err("Power off failed\n");
|
||||
} else {
|
||||
mfc_debug(2, "Shutting down clock\n");
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
}
|
||||
}
|
||||
if (dev)
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ int s5p_mfc_init_hw(struct s5p_mfc_dev *dev)
|
|||
|
||||
/* 0. MFC reset */
|
||||
mfc_debug(2, "MFC reset..\n");
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
dev->risc_on = 0;
|
||||
ret = s5p_mfc_reset(dev);
|
||||
if (ret) {
|
||||
|
|
@ -249,7 +249,7 @@ int s5p_mfc_init_hw(struct s5p_mfc_dev *dev)
|
|||
if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_FW_STATUS_RET)) {
|
||||
mfc_err("Failed to load firmware\n");
|
||||
s5p_mfc_reset(dev);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
return -EIO;
|
||||
}
|
||||
s5p_mfc_clean_dev_int_flags(dev);
|
||||
|
|
@ -258,14 +258,14 @@ int s5p_mfc_init_hw(struct s5p_mfc_dev *dev)
|
|||
if (ret) {
|
||||
mfc_err("Failed to send command to MFC - timeout\n");
|
||||
s5p_mfc_reset(dev);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
return ret;
|
||||
}
|
||||
mfc_debug(2, "Ok, now will wait for completion of hardware init\n");
|
||||
if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_SYS_INIT_RET)) {
|
||||
mfc_err("Failed to init hardware\n");
|
||||
s5p_mfc_reset(dev);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
return -EIO;
|
||||
}
|
||||
dev->int_cond = 0;
|
||||
|
|
@ -275,7 +275,7 @@ int s5p_mfc_init_hw(struct s5p_mfc_dev *dev)
|
|||
mfc_err("Failed to init firmware - error: %d int: %d\n",
|
||||
dev->int_err, dev->int_type);
|
||||
s5p_mfc_reset(dev);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
return -EIO;
|
||||
}
|
||||
if (IS_MFCV6_PLUS(dev))
|
||||
|
|
@ -285,7 +285,7 @@ int s5p_mfc_init_hw(struct s5p_mfc_dev *dev)
|
|||
|
||||
mfc_debug(2, "MFC F/W version : %02xyy, %02xmm, %02xdd\n",
|
||||
(ver >> 16) & 0xFF, (ver >> 8) & 0xFF, ver & 0xFF);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
mfc_debug_leave();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -294,12 +294,12 @@ int s5p_mfc_init_hw(struct s5p_mfc_dev *dev)
|
|||
/* Deinitialize hardware */
|
||||
void s5p_mfc_deinit_hw(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
|
||||
s5p_mfc_reset(dev);
|
||||
s5p_mfc_hw_call(dev->mfc_ops, release_dev_context_buffer, dev);
|
||||
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
}
|
||||
|
||||
int s5p_mfc_sleep(struct s5p_mfc_dev *dev)
|
||||
|
|
@ -307,7 +307,7 @@ int s5p_mfc_sleep(struct s5p_mfc_dev *dev)
|
|||
int ret;
|
||||
|
||||
mfc_debug_enter();
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
s5p_mfc_clean_dev_int_flags(dev);
|
||||
ret = s5p_mfc_hw_call(dev->mfc_cmds, sleep_cmd, dev);
|
||||
if (ret) {
|
||||
|
|
@ -318,7 +318,7 @@ int s5p_mfc_sleep(struct s5p_mfc_dev *dev)
|
|||
mfc_err("Failed to sleep\n");
|
||||
return -EIO;
|
||||
}
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
dev->int_cond = 0;
|
||||
if (dev->int_err != 0 || dev->int_type !=
|
||||
S5P_MFC_R2H_CMD_SLEEP_RET) {
|
||||
|
|
@ -390,12 +390,12 @@ int s5p_mfc_wakeup(struct s5p_mfc_dev *dev)
|
|||
mfc_debug_enter();
|
||||
/* 0. MFC reset */
|
||||
mfc_debug(2, "MFC reset..\n");
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
dev->risc_on = 0;
|
||||
ret = s5p_mfc_reset(dev);
|
||||
if (ret) {
|
||||
mfc_err("Failed to reset MFC - timeout\n");
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
return ret;
|
||||
}
|
||||
mfc_debug(2, "Done MFC reset..\n");
|
||||
|
|
@ -410,7 +410,7 @@ int s5p_mfc_wakeup(struct s5p_mfc_dev *dev)
|
|||
else
|
||||
ret = s5p_mfc_wait_wakeup(dev);
|
||||
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
|||
|
|
@ -496,7 +496,7 @@ static int reqbufs_output(struct s5p_mfc_dev *dev, struct s5p_mfc_ctx *ctx,
|
|||
{
|
||||
int ret = 0;
|
||||
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
|
||||
if (reqbufs->count == 0) {
|
||||
mfc_debug(2, "Freeing buffers\n");
|
||||
|
|
@ -533,7 +533,7 @@ static int reqbufs_output(struct s5p_mfc_dev *dev, struct s5p_mfc_ctx *ctx,
|
|||
ret = -EINVAL;
|
||||
}
|
||||
out:
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
if (ret)
|
||||
mfc_err("Failed allocating buffers for OUTPUT queue\n");
|
||||
return ret;
|
||||
|
|
@ -544,7 +544,7 @@ static int reqbufs_capture(struct s5p_mfc_dev *dev, struct s5p_mfc_ctx *ctx,
|
|||
{
|
||||
int ret = 0;
|
||||
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
|
||||
if (reqbufs->count == 0) {
|
||||
mfc_debug(2, "Freeing buffers\n");
|
||||
|
|
@ -587,7 +587,7 @@ static int reqbufs_capture(struct s5p_mfc_dev *dev, struct s5p_mfc_ctx *ctx,
|
|||
ret = -EINVAL;
|
||||
}
|
||||
out:
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
if (ret)
|
||||
mfc_err("Failed allocating buffers for CAPTURE queue\n");
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -1348,7 +1348,7 @@ static void s5p_mfc_try_run_v5(struct s5p_mfc_dev *dev)
|
|||
* Last frame has already been sent to MFC.
|
||||
* Now obtaining frames from MFC buffer
|
||||
*/
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
s5p_mfc_clean_ctx_int_flags(ctx);
|
||||
|
||||
if (ctx->type == MFCINST_DECODER) {
|
||||
|
|
@ -1424,7 +1424,7 @@ static void s5p_mfc_try_run_v5(struct s5p_mfc_dev *dev)
|
|||
* scheduled, reduce the clock count as no one will
|
||||
* ever do this, because no interrupt related to this try_run
|
||||
* will ever come from hardware. */
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2165,7 +2165,7 @@ static void s5p_mfc_try_run_v6(struct s5p_mfc_dev *dev)
|
|||
/* Last frame has already been sent to MFC
|
||||
* Now obtaining frames from MFC buffer */
|
||||
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(dev);
|
||||
s5p_mfc_clean_ctx_int_flags(ctx);
|
||||
|
||||
if (ctx->type == MFCINST_DECODER) {
|
||||
|
|
@ -2245,7 +2245,7 @@ static void s5p_mfc_try_run_v6(struct s5p_mfc_dev *dev)
|
|||
* scheduled, reduce the clock count as no one will
|
||||
* ever do this, because no interrupt related to this try_run
|
||||
* will ever come from hardware. */
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(dev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2261,9 +2261,9 @@ s5p_mfc_read_info_v6(struct s5p_mfc_ctx *ctx, unsigned long ofs)
|
|||
{
|
||||
int ret;
|
||||
|
||||
s5p_mfc_clock_on();
|
||||
s5p_mfc_clock_on(ctx->dev);
|
||||
ret = readl((void __iomem *)ofs);
|
||||
s5p_mfc_clock_off();
|
||||
s5p_mfc_clock_off(ctx->dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,13 +14,11 @@
|
|||
#include "s5p_mfc_debug.h"
|
||||
#include "s5p_mfc_pm.h"
|
||||
|
||||
static struct s5p_mfc_pm *pm;
|
||||
|
||||
int s5p_mfc_init_pm(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
struct s5p_mfc_pm *pm = &dev->pm;
|
||||
int i;
|
||||
|
||||
pm = &dev->pm;
|
||||
pm->num_clocks = dev->variant->num_clocks;
|
||||
pm->clk_names = dev->variant->clk_names;
|
||||
pm->device = &dev->plat_dev->dev;
|
||||
|
|
@ -50,58 +48,58 @@ int s5p_mfc_init_pm(struct s5p_mfc_dev *dev)
|
|||
|
||||
void s5p_mfc_final_pm(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
pm_runtime_disable(pm->device);
|
||||
pm_runtime_disable(dev->pm.device);
|
||||
}
|
||||
|
||||
int s5p_mfc_clock_on(void)
|
||||
int s5p_mfc_clock_on(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
return clk_enable(pm->clock_gate);
|
||||
return clk_enable(dev->pm.clock_gate);
|
||||
}
|
||||
|
||||
void s5p_mfc_clock_off(void)
|
||||
void s5p_mfc_clock_off(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
clk_disable(pm->clock_gate);
|
||||
clk_disable(dev->pm.clock_gate);
|
||||
}
|
||||
|
||||
int s5p_mfc_power_on(void)
|
||||
int s5p_mfc_power_on(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
int i, ret = 0;
|
||||
|
||||
ret = pm_runtime_resume_and_get(pm->device);
|
||||
ret = pm_runtime_resume_and_get(dev->pm.device);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* clock control */
|
||||
for (i = 0; i < pm->num_clocks; i++) {
|
||||
ret = clk_prepare_enable(pm->clocks[i]);
|
||||
for (i = 0; i < dev->pm.num_clocks; i++) {
|
||||
ret = clk_prepare_enable(dev->pm.clocks[i]);
|
||||
if (ret < 0) {
|
||||
mfc_err("clock prepare failed for clock: %s\n",
|
||||
pm->clk_names[i]);
|
||||
dev->pm.clk_names[i]);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/* prepare for software clock gating */
|
||||
clk_disable(pm->clock_gate);
|
||||
clk_disable(dev->pm.clock_gate);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
while (--i >= 0)
|
||||
clk_disable_unprepare(pm->clocks[i]);
|
||||
pm_runtime_put(pm->device);
|
||||
clk_disable_unprepare(dev->pm.clocks[i]);
|
||||
pm_runtime_put(dev->pm.device);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int s5p_mfc_power_off(void)
|
||||
int s5p_mfc_power_off(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* finish software clock gating */
|
||||
clk_enable(pm->clock_gate);
|
||||
clk_enable(dev->pm.clock_gate);
|
||||
|
||||
for (i = 0; i < pm->num_clocks; i++)
|
||||
clk_disable_unprepare(pm->clocks[i]);
|
||||
for (i = 0; i < dev->pm.num_clocks; i++)
|
||||
clk_disable_unprepare(dev->pm.clocks[i]);
|
||||
|
||||
return pm_runtime_put_sync(pm->device);
|
||||
return pm_runtime_put_sync(dev->pm.device);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
int s5p_mfc_init_pm(struct s5p_mfc_dev *dev);
|
||||
void s5p_mfc_final_pm(struct s5p_mfc_dev *dev);
|
||||
|
||||
int s5p_mfc_clock_on(void);
|
||||
void s5p_mfc_clock_off(void);
|
||||
int s5p_mfc_power_on(void);
|
||||
int s5p_mfc_power_off(void);
|
||||
int s5p_mfc_clock_on(struct s5p_mfc_dev *dev);
|
||||
void s5p_mfc_clock_off(struct s5p_mfc_dev *dev);
|
||||
int s5p_mfc_power_on(struct s5p_mfc_dev *dev);
|
||||
int s5p_mfc_power_off(struct s5p_mfc_dev *dev);
|
||||
|
||||
#endif /* S5P_MFC_PM_H_ */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user