mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 21:15:53 +02:00
Add "mclk" support for maxim,max9867
Merge series from richard.leitner@linux.dev: This series adds support for the clocks properties in the maxim,max9867 bindings. Furthermore the binding definitions are converted from txt to yaml. The clock property is needed to define the mclk for one of our boards which uses the the i.MX8MP SAI MCLK as clock for the maxim,max9867.
This commit is contained in:
commit
316ddb133a
|
|
@ -1,17 +0,0 @@
|
|||
max9867 codec
|
||||
|
||||
This device supports I2C mode only.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "maxim,max9867"
|
||||
- reg : The chip select number on the I2C bus
|
||||
|
||||
Example:
|
||||
|
||||
&i2c {
|
||||
max9867: max9867@18 {
|
||||
compatible = "maxim,max9867";
|
||||
reg = <0x18>;
|
||||
};
|
||||
};
|
||||
66
Documentation/devicetree/bindings/sound/maxim,max9867.yaml
Normal file
66
Documentation/devicetree/bindings/sound/maxim,max9867.yaml
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/maxim,max9867.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Maxim Integrated MAX9867 CODEC
|
||||
|
||||
description: |
|
||||
This device supports I2C only.
|
||||
Pins on the device (for linking into audio routes):
|
||||
* LOUT
|
||||
* ROUT
|
||||
* LINL
|
||||
* LINR
|
||||
* MICL
|
||||
* MICR
|
||||
* DMICL
|
||||
* DMICR
|
||||
|
||||
maintainers:
|
||||
- Ladislav Michl <ladis@linux-mips.org>
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- maxim,max9867
|
||||
|
||||
'#sound-dai-cells':
|
||||
const: 0
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
codec@18 {
|
||||
compatible = "maxim,max9867";
|
||||
#sound-dai-cells = <0>;
|
||||
reg = <0x18>;
|
||||
clocks = <&codec_clk>;
|
||||
};
|
||||
};
|
||||
|
||||
codec_clk: clock {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <12288000>;
|
||||
};
|
||||
...
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
// Copyright 2018 Ladislav Michl <ladis@linux-mips.org>
|
||||
//
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/module.h>
|
||||
|
|
@ -16,6 +17,7 @@
|
|||
#include "max9867.h"
|
||||
|
||||
struct max9867_priv {
|
||||
struct clk *mclk;
|
||||
struct regmap *regmap;
|
||||
const struct snd_pcm_hw_constraint_list *constraints;
|
||||
unsigned int sysclk, pclk;
|
||||
|
|
@ -577,6 +579,11 @@ static int max9867_set_bias_level(struct snd_soc_component *component,
|
|||
struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
switch (level) {
|
||||
case SND_SOC_BIAS_ON:
|
||||
err = clk_prepare_enable(max9867->mclk);
|
||||
if (err)
|
||||
return err;
|
||||
break;
|
||||
case SND_SOC_BIAS_STANDBY:
|
||||
if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) {
|
||||
err = regcache_sync(max9867->regmap);
|
||||
|
|
@ -595,6 +602,7 @@ static int max9867_set_bias_level(struct snd_soc_component *component,
|
|||
return err;
|
||||
|
||||
regcache_mark_dirty(max9867->regmap);
|
||||
clk_disable_unprepare(max9867->mclk);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -663,9 +671,16 @@ static int max9867_i2c_probe(struct i2c_client *i2c)
|
|||
dev_info(&i2c->dev, "device revision: %x\n", reg);
|
||||
ret = devm_snd_soc_register_component(&i2c->dev, &max9867_component,
|
||||
max9867_dai, ARRAY_SIZE(max9867_dai));
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
dev_err(&i2c->dev, "Failed to register component: %d\n", ret);
|
||||
return ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
max9867->mclk = devm_clk_get(&i2c->dev, NULL);
|
||||
if (IS_ERR(max9867->mclk))
|
||||
return PTR_ERR(max9867->mclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct i2c_device_id max9867_i2c_id[] = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user