Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
s5p_mfc_intr.c
Go to the documentation of this file.
1 /*
2  * drivers/media/platform/samsung/mfc5/s5p_mfc_intr.c
3  *
4  * C file for Samsung MFC (Multi Function Codec - FIMV) driver
5  * This file contains functions used to wait for command completion.
6  *
7  * Kamil Debski, Copyright (C) 2011 Samsung Electronics Co., Ltd.
8  * http://www.samsung.com/
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  */
14 
15 #include <linux/delay.h>
16 #include <linux/errno.h>
17 #include <linux/io.h>
18 #include <linux/sched.h>
19 #include <linux/wait.h>
20 #include "s5p_mfc_common.h"
21 #include "s5p_mfc_debug.h"
22 #include "s5p_mfc_intr.h"
23 
25 {
26  int ret;
27 
29  (dev->int_cond && (dev->int_type == command
30  || dev->int_type == S5P_MFC_R2H_CMD_ERR_RET)),
32  if (ret == 0) {
33  mfc_err("Interrupt (dev->int_type:%d, command:%d) timed out\n",
34  dev->int_type, command);
35  return 1;
36  } else if (ret == -ERESTARTSYS) {
37  mfc_err("Interrupted by a signal\n");
38  return 1;
39  }
40  mfc_debug(1, "Finished waiting (dev->int_type:%d, command: %d)\n",
41  dev->int_type, command);
43  return 1;
44  return 0;
45 }
46 
48 {
49  dev->int_cond = 0;
50  dev->int_type = 0;
51  dev->int_err = 0;
52 }
53 
55  int command, int interrupt)
56 {
57  int ret;
58 
59  if (interrupt) {
61  (ctx->int_cond && (ctx->int_type == command
62  || ctx->int_type == S5P_MFC_R2H_CMD_ERR_RET)),
64  } else {
65  ret = wait_event_timeout(ctx->queue,
66  (ctx->int_cond && (ctx->int_type == command
67  || ctx->int_type == S5P_MFC_R2H_CMD_ERR_RET)),
69  }
70  if (ret == 0) {
71  mfc_err("Interrupt (ctx->int_type:%d, command:%d) timed out\n",
72  ctx->int_type, command);
73  return 1;
74  } else if (ret == -ERESTARTSYS) {
75  mfc_err("Interrupted by a signal\n");
76  return 1;
77  }
78  mfc_debug(1, "Finished waiting (ctx->int_type:%d, command: %d)\n",
79  ctx->int_type, command);
81  return 1;
82  return 0;
83 }
84 
86 {
87  ctx->int_cond = 0;
88  ctx->int_type = 0;
89  ctx->int_err = 0;
90 }
91