]>
git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - drivers/media/dvb-frontends/cxd2880/cxd2880_common.c
3 * Sony CXD2880 DVB-T2/T tuner + demodulator driver
6 * Copyright (C) 2016, 2017 Sony Semiconductor Solutions Corporation
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; version 2 of the License.
12 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
13 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
14 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
15 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
16 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
17 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
18 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
19 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
20 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
21 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 * You should have received a copy of the GNU General Public License along
24 * with this program; if not, see <http://www.gnu.org/licenses/>.
27 #include "cxd2880_common.h"
29 #define MASKUPPER(n) (((n) == 0) ? 0 : (0xFFFFFFFFU << (32 - (n))))
30 #define MASKLOWER(n) (((n) == 0) ? 0 : (0xFFFFFFFFU >> (32 - (n))))
32 int cxd2880_convert2s_complement(u32 value
, u32 bitlen
)
34 if ((bitlen
== 0) || (bitlen
>= 32))
37 if (value
& (u32
)(1 << (bitlen
- 1)))
38 return (int)(MASKUPPER(32 - bitlen
) | value
);
40 return (int)(MASKLOWER(bitlen
) & value
);
43 u32
cxd2880_bit_split_from_byte_array(u8
*array
, u32 start_bit
, u32 bit_num
)
52 if ((bit_num
== 0) || (bit_num
> 32))
55 array_read
= array
+ (start_bit
/ 8);
56 bit_read
= (u8
)(start_bit
% 8);
60 if (((int)len_remain
) <= 8 - bit_read
) {
61 value
= (*array_read
) >> ((8 - bit_read
) - len_remain
);
64 value
= *array_read
++;
65 len_remain
-= 8 - bit_read
;
69 while (len_remain
> 0) {
72 value
|= (*array_read
++ >> (8 - len_remain
));
76 value
|= (u32
)(*array_read
++);
81 value
&= MASKLOWER(bit_num
);