[Sound-open-firmware] [PATCH 2/4] [RFC]DMIC: Changes for other source code files

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Mon Apr 30 22:23:26 CEST 2018


On 4/30/18 11:04 AM, Seppo Ingalsuo wrote:
> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo at linux.intel.com>
> ---
>   src/arch/xtensa/Makefile.am    |  2 +-
>   src/audio/src.c                |  1 +
>   src/audio/src.h                |  3 --
>   src/include/sof/math/numbers.h | 18 +++++++++++
>   src/include/sof/ssp.h          |  2 --
>   src/math/numbers.c             | 68 ++++++++++++++++++++++++++++++++++++++++++


looks ok, I would add something to find the first non-zero bit 
(something you use quite a bit to scale factors)

>   6 files changed, 88 insertions(+), 6 deletions(-)
> 
> diff --git a/src/arch/xtensa/Makefile.am b/src/arch/xtensa/Makefile.am
> index 9f53e88..082b3c2 100644
> --- a/src/arch/xtensa/Makefile.am
> +++ b/src/arch/xtensa/Makefile.am
> @@ -59,8 +59,8 @@ sof_LDADD = \
>   	../../platform/$(PLATFORM)/libplatform.a \
>   	../../ipc/libsof_ipc.a \
>   	../../audio/libaudio.a \
> -	../../math/libsof_math.a \
>   	../../drivers/libdrivers.a \
> +	../../math/libsof_math.a \
>   	libreset.a \
>   	xtos/libxtos.a \
>   	xtos/libxlevel2.a \
> diff --git a/src/audio/src.c b/src/audio/src.c
> index cded8b8..c19828a 100644
> --- a/src/audio/src.c
> +++ b/src/audio/src.c
> @@ -42,6 +42,7 @@
>   #include <sof/clock.h>
>   #include <sof/audio/component.h>
>   #include <sof/audio/pipeline.h>
> +#include <sof/math/numbers.h>
>   #include <uapi/ipc.h>
>   
>   #include "src_config.h"
> diff --git a/src/audio/src.h b/src/audio/src.h
> index 3208693..5268a66 100644
> --- a/src/audio/src.h
> +++ b/src/audio/src.h
> @@ -32,9 +32,6 @@
>   #ifndef SRC_H
>   #define SRC_H
>   
> -#define MAX(a, b) (((a) > (b)) ? (a) : (b))
> -#define MIN(a, b) (((a) < (b)) ? (a) : (b))
> -
>   struct src_param {
>   	int fir_s1;
>   	int fir_s2;
> diff --git a/src/include/sof/math/numbers.h b/src/include/sof/math/numbers.h
> index 927d39c..cadbcf9 100644
> --- a/src/include/sof/math/numbers.h
> +++ b/src/include/sof/math/numbers.h
> @@ -33,6 +33,24 @@
>   #ifndef NUMBERS_H
>   #define NUMBERS_H
>   
> +#include <stdint.h>
> +
> +#define MIN(a, b) (((a) < (b)) ? (a) : (b))
> +#define MAX(a, b) (((a) > (b)) ? (a) : (b))
> +
>   int gcd(int a, int b); /* Calculate greatest common divisor for a and b */
>   
> +/* Divide function that returns ceil() of quotient */
> +int ceil_divide(int a, int b);
> +
> +/* Find indices of equal values in a vector of integer values */
> +int find_equal(int idx[], int vec[], int n, int vec_length, int max_results);
> +
> +/* Return the smallest value found in a vector */
> +int find_min(int vec[], int vec_length);
> +
> +/* Return the largest absolute value found in a vector */
> +int32_t find_max_abs_int32(int32_t vec[], int vec_length);
> +
> +
>   #endif /* NUMBERS_H */
> diff --git a/src/include/sof/ssp.h b/src/include/sof/ssp.h
> index c66f67b..5a57d58 100644
> --- a/src/include/sof/ssp.h
> +++ b/src/include/sof/ssp.h
> @@ -38,8 +38,6 @@
>   #include <sof/trace.h>
>   #include <sof/wait.h>
>   
> -#define BIT(x) (1 << (x))
> -
>   #define SSP_CLK_AUDIO	0
>   #define SSP_CLK_NET_PLL	1
>   #define SSP_CLK_EXT	2
> diff --git a/src/math/numbers.c b/src/math/numbers.c
> index d7a1717..f3ee08d 100644
> --- a/src/math/numbers.c
> +++ b/src/math/numbers.c
> @@ -36,6 +36,7 @@
>    */
>   
>   #include <sof/math/numbers.h>
> +#include <sof/audio/format.h>
>   
>   int gcd(int a, int b)
>   {
> @@ -47,3 +48,70 @@ int gcd(int a, int b)
>   	}
>   	return a;
>   }
> +
> +/* This is a divide function that returns ceil of the quotient.
> + * E.g. ceil_divide(9, 3) returns 3, ceil_divide(10, 3) returns 4.
> + */
> +int ceil_divide(int a, int b)
> +{
> +	int c;
> +
> +	c = a / b;
> +	if (c * b < a)
> +		c++;
> +
> +	return c;
> +}
> +
> +
> +/* This function searches from vec[] (of length vec_length) integer values
> + * of n. The indexes to equal values is returned in idx[]. The function
> + * returns the number of found matches. The max_results should be set to
> + * 0 (or negative) or vec_length get all the matches. The max_result can be set
> + * to 1 to receive only the first match in ascending order. It avoids need
> + * for an array for idx.
> + */
> +int find_equal(int idx[], int vec[], int n, int vec_length,
> +	int max_results)
> +{
> +	int nresults = 0;
> +	int i;
> +
> +	for (i = 0; i < vec_length; i++) {
> +		if (vec[i] == n) {
> +			idx[nresults++] = i;
> +			if (nresults == max_results)
> +				break;
> +		}
> +	}
> +
> +	return nresults;
> +}
> +
> +/* Return the smallest value found in the vector */
> +int find_min(int vec[], int vec_length)
> +{
> +	int i;
> +	int min = vec[0];
> +
> +	for (i = 1; i < vec_length; i++)
> +		min = (vec[i] < min) ? vec[i] : min;
> +
> +	return min;
> +}
> +
> +/* Return the largest absolute value found in the vector. Note that
> + * smallest negative value need to be saturated to preset as int32_t.
> + */
> +int32_t find_max_abs_int32(int32_t vec[], int vec_length)
> +{
> +	int i;
> +	int64_t amax = (vec[0] > 0) ? vec[0] : -vec[0];
> +
> +	for (i = 1; i < vec_length; i++) {
> +		amax = (vec[i] > amax) ? vec[i] : amax;
> +		amax = (-vec[i] > amax) ? -vec[i] : amax;
> +	}
> +
> +	return SATP_INT32(amax); /* Amax is always a positive value */
> +}
> 



More information about the Sound-open-firmware mailing list