Linux Audio

Check our new training course

Loading...
v6.13.7
 1// SPDX-License-Identifier: GPL-2.0-or-later
 2/*
 3 * Shared helper functions for devices from the ADAU family
 4 *
 5 * Copyright 2011-2016 Analog Devices Inc.
 6 * Author: Lars-Peter Clausen <lars@metafoo.de>
 
 
 7 */
 8
 9#include <linux/gcd.h>
10#include <linux/kernel.h>
11#include <linux/module.h>
12
13#include "adau-utils.h"
14
15int adau_calc_pll_cfg(unsigned int freq_in, unsigned int freq_out,
16	uint8_t regs[5])
17{
18	unsigned int r, n, m, i, j;
19	unsigned int div;
20
21	if (!freq_out) {
22		r = 0;
23		n = 0;
24		m = 0;
25		div = 0;
26	} else {
27		if (freq_out % freq_in != 0) {
28			div = DIV_ROUND_UP(freq_in, 13500000);
29			freq_in /= div;
30			r = freq_out / freq_in;
31			i = freq_out % freq_in;
32			j = gcd(i, freq_in);
33			n = i / j;
34			m = freq_in / j;
35			div--;
36		} else {
37			r = freq_out / freq_in;
38			n = 0;
39			m = 0;
40			div = 0;
41		}
42		if (n > 0xffff || m > 0xffff || div > 3 || r > 8 || r < 2)
43			return -EINVAL;
44	}
45
46	regs[0] = m >> 8;
47	regs[1] = m & 0xff;
48	regs[2] = n >> 8;
49	regs[3] = n & 0xff;
50	regs[4] = (r << 3) | (div << 1);
51	if (m != 0)
52		regs[4] |= 1; /* Fractional mode */
53
54	return 0;
55}
56EXPORT_SYMBOL_GPL(adau_calc_pll_cfg);
57
58MODULE_DESCRIPTION("ASoC ADAU audio CODECs shared helper functions");
59MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
60MODULE_LICENSE("GPL v2");
v4.10.11
 
 1/*
 2 * Shared helper functions for devices from the ADAU family
 3 *
 4 * Copyright 2011-2016 Analog Devices Inc.
 5 * Author: Lars-Peter Clausen <lars@metafoo.de>
 6 *
 7 * Licensed under the GPL-2 or later.
 8 */
 9
10#include <linux/gcd.h>
11#include <linux/kernel.h>
12#include <linux/module.h>
13
14#include "adau-utils.h"
15
16int adau_calc_pll_cfg(unsigned int freq_in, unsigned int freq_out,
17	uint8_t regs[5])
18{
19	unsigned int r, n, m, i, j;
20	unsigned int div;
21
22	if (!freq_out) {
23		r = 0;
24		n = 0;
25		m = 0;
26		div = 0;
27	} else {
28		if (freq_out % freq_in != 0) {
29			div = DIV_ROUND_UP(freq_in, 13500000);
30			freq_in /= div;
31			r = freq_out / freq_in;
32			i = freq_out % freq_in;
33			j = gcd(i, freq_in);
34			n = i / j;
35			m = freq_in / j;
36			div--;
37		} else {
38			r = freq_out / freq_in;
39			n = 0;
40			m = 0;
41			div = 0;
42		}
43		if (n > 0xffff || m > 0xffff || div > 3 || r > 8 || r < 2)
44			return -EINVAL;
45	}
46
47	regs[0] = m >> 8;
48	regs[1] = m & 0xff;
49	regs[2] = n >> 8;
50	regs[3] = n & 0xff;
51	regs[4] = (r << 3) | (div << 1);
52	if (m != 0)
53		regs[4] |= 1; /* Fractional mode */
54
55	return 0;
56}
57EXPORT_SYMBOL_GPL(adau_calc_pll_cfg);
58
59MODULE_DESCRIPTION("ASoC ADAU audio CODECs shared helper functions");
60MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
61MODULE_LICENSE("GPL v2");