1315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet/*
2315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * Abilis Systems Single DVB-T Receiver
3315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com>
4315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet *
5315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * This program is free software; you can redistribute it and/or modify
6315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * it under the terms of the GNU General Public License as published by
7315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * the Free Software Foundation; either version 2, or (at your option)
8315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * any later version.
9315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet *
10315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * This program is distributed in the hope that it will be useful,
11315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * but WITHOUT ANY WARRANTY; without even the implied warranty of
12315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * GNU General Public License for more details.
14315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet *
15315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * You should have received a copy of the GNU General Public License
16315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * along with this program; if not, write to the Free Software
17315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18315cadc446714c5c1a406afff6f53aa80d1e267ePierrick Hascoet */
19f080c2ef542b0d3c78eb2f98a4450a8e22b471afPiotr Chmura
2041b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet#include <linux/kernel.h>
2141b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet#include "as102_drv.h"
2241b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet#include "as10x_cmd.h"
2341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
2441b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet/**
253b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * as10x_cmd_add_PID_filter - send add filter command to AS10x
2634490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki * @adap:      pointer to AS10x bus adapter
273b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * @filter:    TSFilter filter for DVB-T
283b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki *
293b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * Return 0 on success or negative value in case of error.
303b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki */
3134490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrockiint as10x_cmd_add_PID_filter(struct as10x_bus_adapter_t *adap,
3279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller			     struct as10x_ts_filter *filter)
3379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller{
3479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	int error;
3579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	struct as10x_cmd_t *pcmd, *prsp;
3679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
3779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	ENTER();
3879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
3934490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	pcmd = adap->cmd;
4034490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	prsp = adap->rsp;
4179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
4279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* prepare command */
4334490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	as10x_cmd_build(pcmd, (++adap->cmd_xid),
4479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller			sizeof(pcmd->body.add_pid_filter.req));
4579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
4679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* fill command */
4779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	pcmd->body.add_pid_filter.req.proc_id =
4879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		cpu_to_le16(CONTROL_PROC_SETFILTER);
4979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	pcmd->body.add_pid_filter.req.pid = cpu_to_le16(filter->pid);
5079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	pcmd->body.add_pid_filter.req.stream_type = filter->type;
5179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
5279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	if (filter->idx < 16)
5379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		pcmd->body.add_pid_filter.req.idx = filter->idx;
5479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	else
5579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		pcmd->body.add_pid_filter.req.idx = 0xFF;
5679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
5779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* send command */
5834490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	if (adap->ops->xfer_cmd) {
5934490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki		error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
6079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(pcmd->body.add_pid_filter.req)
6179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE, (uint8_t *) prsp,
6279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(prsp->body.add_pid_filter.rsp)
6379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE);
6479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	} else {
6579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		error = AS10X_CMD_ERROR;
6679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	}
6779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
6879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	if (error < 0)
6979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		goto out;
7079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
7179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* parse response */
7279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	error = as10x_rsp_parse(prsp, CONTROL_PROC_SETFILTER_RSP);
7379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller
7479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	if (error == 0) {
7579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		/* Response OK -> get response data */
7679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		filter->idx = prsp->body.add_pid_filter.rsp.filter_id;
7779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	}
7841b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
7941b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoetout:
8079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	LEAVE();
8179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	return error;
8241b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet}
8341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
8441b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet/**
853b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * as10x_cmd_del_PID_filter - Send delete filter command to AS10x
8634490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki * @adap:         pointer to AS10x bus adapte
873b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * @pid_value:    PID to delete
883b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki *
893b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * Return 0 on success or negative value in case of error.
903b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki */
9134490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrockiint as10x_cmd_del_PID_filter(struct as10x_bus_adapter_t *adap,
9241b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet			     uint16_t pid_value)
9341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet{
9479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	int error;
9579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	struct as10x_cmd_t *pcmd, *prsp;
9641b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
9779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	ENTER();
9841b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
9934490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	pcmd = adap->cmd;
10034490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	prsp = adap->rsp;
10141b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
10279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* prepare command */
10334490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	as10x_cmd_build(pcmd, (++adap->cmd_xid),
10479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller			sizeof(pcmd->body.del_pid_filter.req));
10541b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
10679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* fill command */
10779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	pcmd->body.del_pid_filter.req.proc_id =
10879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		cpu_to_le16(CONTROL_PROC_REMOVEFILTER);
10979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	pcmd->body.del_pid_filter.req.pid = cpu_to_le16(pid_value);
11041b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
11179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* send command */
11234490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	if (adap->ops->xfer_cmd) {
11334490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki		error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
11479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(pcmd->body.del_pid_filter.req)
11579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE, (uint8_t *) prsp,
11679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(prsp->body.del_pid_filter.rsp)
11779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE);
11879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	} else {
11979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		error = AS10X_CMD_ERROR;
12079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	}
12141b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
12279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	if (error < 0)
12379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		goto out;
12441b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
12579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* parse response */
12679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	error = as10x_rsp_parse(prsp, CONTROL_PROC_REMOVEFILTER_RSP);
12741b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
12841b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoetout:
12979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	LEAVE();
13079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	return error;
13141b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet}
13241b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
13341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet/**
1343b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * as10x_cmd_start_streaming - Send start streaming command to AS10x
13534490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki * @adap:   pointer to AS10x bus adapter
1363b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki *
1373b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * Return 0 on success or negative value in case of error.
1383b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki */
13934490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrockiint as10x_cmd_start_streaming(struct as10x_bus_adapter_t *adap)
14041b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet{
14179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	int error;
14279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	struct as10x_cmd_t *pcmd, *prsp;
14341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
14479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	ENTER();
14541b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
14634490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	pcmd = adap->cmd;
14734490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	prsp = adap->rsp;
14841b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
14979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* prepare command */
15034490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	as10x_cmd_build(pcmd, (++adap->cmd_xid),
15179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller			sizeof(pcmd->body.start_streaming.req));
15241b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
15379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* fill command */
15479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	pcmd->body.start_streaming.req.proc_id =
15579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		cpu_to_le16(CONTROL_PROC_START_STREAMING);
15641b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
15779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* send command */
15834490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	if (adap->ops->xfer_cmd) {
15934490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki		error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
16079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(pcmd->body.start_streaming.req)
16179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE, (uint8_t *) prsp,
16279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(prsp->body.start_streaming.rsp)
16379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE);
16479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	} else {
16579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		error = AS10X_CMD_ERROR;
16679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	}
16741b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
16879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	if (error < 0)
16979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		goto out;
17041b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
17179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* parse response */
17279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	error = as10x_rsp_parse(prsp, CONTROL_PROC_START_STREAMING_RSP);
17341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
17441b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoetout:
17579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	LEAVE();
17679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	return error;
17741b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet}
17841b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
17941b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet/**
1803b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * as10x_cmd_stop_streaming - Send stop streaming command to AS10x
18134490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki * @adap:   pointer to AS10x bus adapter
1823b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki *
1833b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki * Return 0 on success or negative value in case of error.
1843b4544a3a48b113d09610f2188954f4276047781Sylwester Nawrocki */
18534490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrockiint as10x_cmd_stop_streaming(struct as10x_bus_adapter_t *adap)
18641b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet{
18779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	int8_t error;
18879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	struct as10x_cmd_t *pcmd, *prsp;
18941b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
19079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	ENTER();
19141b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
19234490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	pcmd = adap->cmd;
19334490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	prsp = adap->rsp;
19441b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
19579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* prepare command */
19634490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	as10x_cmd_build(pcmd, (++adap->cmd_xid),
19779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller			sizeof(pcmd->body.stop_streaming.req));
19841b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
19979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* fill command */
20079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	pcmd->body.stop_streaming.req.proc_id =
20179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		cpu_to_le16(CONTROL_PROC_STOP_STREAMING);
20241b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
20379848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* send command */
20434490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki	if (adap->ops->xfer_cmd) {
20534490a0a3dfd9c048abc5b9a3ce86fb0fbf881cfSylwester Nawrocki		error = adap->ops->xfer_cmd(adap, (uint8_t *) pcmd,
20679848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(pcmd->body.stop_streaming.req)
20779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE, (uint8_t *) prsp,
20879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				sizeof(prsp->body.stop_streaming.rsp)
20979848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller				+ HEADER_SIZE);
21079848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	} else {
21179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		error = AS10X_CMD_ERROR;
21279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	}
21341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
21479848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	if (error < 0)
21579848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller		goto out;
21641b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
21779848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	/* parse response */
21879848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	error = as10x_rsp_parse(prsp, CONTROL_PROC_STOP_STREAMING_RSP);
21941b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet
22041b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoetout:
22179848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	LEAVE();
22279848e9afbdb47a230d55d29af1a6fada718427cDevin Heitmueller	return error;
22341b44e0418112e694f9b7beb8088efbb8c9c0053Pierrick Hascoet}
224