Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50ce2da3 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Simon Horman
Browse files

ARM: shmobile: use FSI driver's audio clock on mackerel



Current FSI driver can control audio clock without platform
call-back functions
This patch removed board-specific call-back/settings

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
parent 13e35b40
Loading
Loading
Loading
Loading
+1 −71
Original line number Original line Diff line number Diff line
@@ -862,76 +862,6 @@ static struct platform_device leds_device = {


/* FSI */
/* FSI */
#define IRQ_FSI evt2irq(0x1840)
#define IRQ_FSI evt2irq(0x1840)
static int __fsi_set_round_rate(struct clk *clk, long rate, int enable)
{
	int ret;

	if (rate <= 0)
		return 0;

	if (!enable) {
		clk_disable(clk);
		return 0;
	}

	ret = clk_set_rate(clk, clk_round_rate(clk, rate));
	if (ret < 0)
		return ret;

	return clk_enable(clk);
}

static int fsi_b_set_rate(struct device *dev, int rate, int enable)
{
	struct clk *fsib_clk;
	struct clk *fdiv_clk = clk_get(NULL, "fsidivb");
	long fsib_rate = 0;
	long fdiv_rate = 0;
	int ackmd_bpfmd;
	int ret;

	/* clock start */
	switch (rate) {
	case 44100:
		fsib_rate	= rate * 256;
		ackmd_bpfmd	= SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64;
		break;
	case 48000:
		fsib_rate	= 85428000; /* around 48kHz x 256 x 7 */
		fdiv_rate	= rate * 256;
		ackmd_bpfmd	= SH_FSI_ACKMD_256 | SH_FSI_BPFMD_64;
		break;
	default:
		pr_err("unsupported rate in FSI2 port B\n");
		return -EINVAL;
	}

	/* FSI B setting */
	fsib_clk = clk_get(dev, "ickb");
	if (IS_ERR(fsib_clk))
		return -EIO;

	/* fsib */
	ret = __fsi_set_round_rate(fsib_clk, fsib_rate, enable);
	if (ret < 0)
		goto fsi_set_rate_end;

	/* FSI DIV */
	ret = __fsi_set_round_rate(fdiv_clk, fdiv_rate, enable);
	if (ret < 0) {
		/* disable FSI B */
		if (enable)
			__fsi_set_round_rate(fsib_clk, fsib_rate, 0);
		goto fsi_set_rate_end;
	}

	ret = ackmd_bpfmd;

fsi_set_rate_end:
	clk_put(fsib_clk);
	return ret;
}

static struct sh_fsi_platform_info fsi_info = {
static struct sh_fsi_platform_info fsi_info = {
	.port_a = {
	.port_a = {
		.flags = SH_FSI_BRS_INV,
		.flags = SH_FSI_BRS_INV,
@@ -942,8 +872,8 @@ static struct sh_fsi_platform_info fsi_info = {
		.flags = SH_FSI_BRS_INV	|
		.flags = SH_FSI_BRS_INV	|
			SH_FSI_BRM_INV	|
			SH_FSI_BRM_INV	|
			SH_FSI_LRS_INV	|
			SH_FSI_LRS_INV	|
			SH_FSI_CLK_CPG	|
			SH_FSI_FMT_SPDIF,
			SH_FSI_FMT_SPDIF,
		.set_rate = fsi_b_set_rate,
	}
	}
};
};