1 /*
2 * Copyright (C) 2013-2015 Freescale Semiconductor
3 *
4 * SPDX-License-Identifier: GPL-2.0+
5 */
6
7 #include <fsl-mc/fsl_mc_sys.h>
8 #include <fsl-mc/fsl_mc_cmd.h>
9 #include <fsl-mc/fsl_dpio.h>
10
dpio_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int dpio_id,uint16_t * token)11 int dpio_open(struct fsl_mc_io *mc_io,
12 uint32_t cmd_flags,
13 int dpio_id,
14 uint16_t *token)
15 {
16 struct mc_command cmd = { 0 };
17 int err;
18
19 /* prepare command */
20 cmd.header = mc_encode_cmd_header(DPIO_CMDID_OPEN,
21 cmd_flags,
22 0);
23 DPIO_CMD_OPEN(cmd, dpio_id);
24
25 /* send command to mc*/
26 err = mc_send_command(mc_io, &cmd);
27 if (err)
28 return err;
29
30 /* retrieve response parameters */
31 *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
32
33 return 0;
34 }
35
dpio_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)36 int dpio_close(struct fsl_mc_io *mc_io,
37 uint32_t cmd_flags,
38 uint16_t token)
39 {
40 struct mc_command cmd = { 0 };
41
42 /* prepare command */
43 cmd.header = mc_encode_cmd_header(DPIO_CMDID_CLOSE,
44 cmd_flags,
45 token);
46
47 /* send command to mc*/
48 return mc_send_command(mc_io, &cmd);
49 }
50
dpio_create(struct fsl_mc_io * mc_io,uint32_t cmd_flags,const struct dpio_cfg * cfg,uint16_t * token)51 int dpio_create(struct fsl_mc_io *mc_io,
52 uint32_t cmd_flags,
53 const struct dpio_cfg *cfg,
54 uint16_t *token)
55 {
56 struct mc_command cmd = { 0 };
57 int err;
58
59 /* prepare command */
60 cmd.header = mc_encode_cmd_header(DPIO_CMDID_CREATE,
61 cmd_flags,
62 0);
63 DPIO_CMD_CREATE(cmd, cfg);
64
65 /* send command to mc*/
66 err = mc_send_command(mc_io, &cmd);
67 if (err)
68 return err;
69
70 /* retrieve response parameters */
71 *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
72
73 return 0;
74 }
75
dpio_destroy(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)76 int dpio_destroy(struct fsl_mc_io *mc_io,
77 uint32_t cmd_flags,
78 uint16_t token)
79 {
80 struct mc_command cmd = { 0 };
81
82 /* prepare command */
83 cmd.header = mc_encode_cmd_header(DPIO_CMDID_DESTROY,
84 cmd_flags,
85 token);
86
87 /* send command to mc*/
88 return mc_send_command(mc_io, &cmd);
89 }
90
dpio_enable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)91 int dpio_enable(struct fsl_mc_io *mc_io,
92 uint32_t cmd_flags,
93 uint16_t token)
94 {
95 struct mc_command cmd = { 0 };
96
97 /* prepare command */
98 cmd.header = mc_encode_cmd_header(DPIO_CMDID_ENABLE,
99 cmd_flags,
100 token);
101
102 /* send command to mc*/
103 return mc_send_command(mc_io, &cmd);
104 }
105
dpio_disable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)106 int dpio_disable(struct fsl_mc_io *mc_io,
107 uint32_t cmd_flags,
108 uint16_t token)
109 {
110 struct mc_command cmd = { 0 };
111
112 /* prepare command */
113 cmd.header = mc_encode_cmd_header(DPIO_CMDID_DISABLE,
114 cmd_flags,
115 token);
116
117 /* send command to mc*/
118 return mc_send_command(mc_io, &cmd);
119 }
120
dpio_reset(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)121 int dpio_reset(struct fsl_mc_io *mc_io,
122 uint32_t cmd_flags,
123 uint16_t token)
124 {
125 struct mc_command cmd = { 0 };
126
127 /* prepare command */
128 cmd.header = mc_encode_cmd_header(DPIO_CMDID_RESET,
129 cmd_flags,
130 token);
131
132 /* send command to mc*/
133 return mc_send_command(mc_io, &cmd);
134 }
135
dpio_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpio_attr * attr)136 int dpio_get_attributes(struct fsl_mc_io *mc_io,
137 uint32_t cmd_flags,
138 uint16_t token,
139 struct dpio_attr *attr)
140 {
141 struct mc_command cmd = { 0 };
142 int err;
143
144 /* prepare command */
145 cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_ATTR,
146 cmd_flags,
147 token);
148
149 /* send command to mc*/
150 err = mc_send_command(mc_io, &cmd);
151 if (err)
152 return err;
153
154 /* retrieve response parameters */
155 DPIO_RSP_GET_ATTR(cmd, attr);
156
157 return 0;
158 }
159