2 * Abilis Systems Single DVB-T Receiver
3 * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include <linux/kernel.h>
21 #include "as102_drv.h"
22 #include "as10x_cmd.h"
25 * as10x_cmd_add_PID_filter - send add filter command to AS10x
26 * @adap: pointer to AS10x bus adapter
27 * @filter: TSFilter filter for DVB-T
29 * Return 0 on success or negative value in case of error.
31 int as10x_cmd_add_PID_filter(struct as10x_bus_adapter_t *adap,
32 struct as10x_ts_filter *filter)
35 struct as10x_cmd_t *pcmd, *prsp;
41 as10x_cmd_build(pcmd, (++adap->cmd_xid),
42 sizeof(pcmd->body.add_pid_filter.req));
45 pcmd->body.add_pid_filter.req.proc_id =
46 cpu_to_le16(CONTROL_PROC_SETFILTER);
47 pcmd->body.add_pid_filter.req.pid = cpu_to_le16(filter->pid);
48 pcmd->body.add_pid_filter.req.stream_type = filter->type;
51 pcmd->body.add_pid_filter.req.idx = filter->idx;
53 pcmd->body.add_pid_filter.req.idx = 0xFF;
56 if (adap->ops->xfer_cmd) {
57 error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
58 sizeof(pcmd->body.add_pid_filter.req)
59 + HEADER_SIZE, (uint8_t *) prsp,
60 sizeof(prsp->body.add_pid_filter.rsp)
63 error = AS10X_CMD_ERROR;
70 error = as10x_rsp_parse(prsp, CONTROL_PROC_SETFILTER_RSP);
73 /* Response OK -> get response data */
74 filter->idx = prsp->body.add_pid_filter.rsp.filter_id;
82 * as10x_cmd_del_PID_filter - Send delete filter command to AS10x
83 * @adap: pointer to AS10x bus adapte
84 * @pid_value: PID to delete
86 * Return 0 on success or negative value in case of error.
88 int as10x_cmd_del_PID_filter(struct as10x_bus_adapter_t *adap,
92 struct as10x_cmd_t *pcmd, *prsp;
98 as10x_cmd_build(pcmd, (++adap->cmd_xid),
99 sizeof(pcmd->body.del_pid_filter.req));
102 pcmd->body.del_pid_filter.req.proc_id =
103 cpu_to_le16(CONTROL_PROC_REMOVEFILTER);
104 pcmd->body.del_pid_filter.req.pid = cpu_to_le16(pid_value);
107 if (adap->ops->xfer_cmd) {
108 error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
109 sizeof(pcmd->body.del_pid_filter.req)
110 + HEADER_SIZE, (uint8_t *) prsp,
111 sizeof(prsp->body.del_pid_filter.rsp)
114 error = AS10X_CMD_ERROR;
121 error = as10x_rsp_parse(prsp, CONTROL_PROC_REMOVEFILTER_RSP);
128 * as10x_cmd_start_streaming - Send start streaming command to AS10x
129 * @adap: pointer to AS10x bus adapter
131 * Return 0 on success or negative value in case of error.
133 int as10x_cmd_start_streaming(struct as10x_bus_adapter_t *adap)
136 struct as10x_cmd_t *pcmd, *prsp;
141 /* prepare command */
142 as10x_cmd_build(pcmd, (++adap->cmd_xid),
143 sizeof(pcmd->body.start_streaming.req));
146 pcmd->body.start_streaming.req.proc_id =
147 cpu_to_le16(CONTROL_PROC_START_STREAMING);
150 if (adap->ops->xfer_cmd) {
151 error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
152 sizeof(pcmd->body.start_streaming.req)
153 + HEADER_SIZE, (uint8_t *) prsp,
154 sizeof(prsp->body.start_streaming.rsp)
157 error = AS10X_CMD_ERROR;
164 error = as10x_rsp_parse(prsp, CONTROL_PROC_START_STREAMING_RSP);
171 * as10x_cmd_stop_streaming - Send stop streaming command to AS10x
172 * @adap: pointer to AS10x bus adapter
174 * Return 0 on success or negative value in case of error.
176 int as10x_cmd_stop_streaming(struct as10x_bus_adapter_t *adap)
179 struct as10x_cmd_t *pcmd, *prsp;
184 /* prepare command */
185 as10x_cmd_build(pcmd, (++adap->cmd_xid),
186 sizeof(pcmd->body.stop_streaming.req));
189 pcmd->body.stop_streaming.req.proc_id =
190 cpu_to_le16(CONTROL_PROC_STOP_STREAMING);
193 if (adap->ops->xfer_cmd) {
194 error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
195 sizeof(pcmd->body.stop_streaming.req)
196 + HEADER_SIZE, (uint8_t *) prsp,
197 sizeof(prsp->body.stop_streaming.rsp)
200 error = AS10X_CMD_ERROR;
207 error = as10x_rsp_parse(prsp, CONTROL_PROC_STOP_STREAMING_RSP);