.. | .. |
---|
34 | 34 | return audio->read(hdmi, offset); |
---|
35 | 35 | } |
---|
36 | 36 | |
---|
| 37 | +static inline void hdmi_update_bits(struct dw_hdmi_i2s_audio_data *audio, |
---|
| 38 | + u8 data, u8 mask, unsigned int reg) |
---|
| 39 | +{ |
---|
| 40 | + struct dw_hdmi *hdmi = audio->hdmi; |
---|
| 41 | + |
---|
| 42 | + audio->mod(hdmi, data, mask, reg); |
---|
| 43 | +} |
---|
| 44 | + |
---|
37 | 45 | static int dw_hdmi_i2s_hw_params(struct device *dev, void *data, |
---|
38 | 46 | struct hdmi_codec_daifmt *fmt, |
---|
39 | 47 | struct hdmi_codec_params *hparms) |
---|
.. | .. |
---|
52 | 60 | } |
---|
53 | 61 | |
---|
54 | 62 | /* Reset the FIFOs before applying new params */ |
---|
55 | | - hdmi_write(audio, HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0); |
---|
| 63 | + hdmi_update_bits(audio, HDMI_AUD_CONF0_SW_RESET, |
---|
| 64 | + HDMI_AUD_CONF0_SW_RESET, HDMI_AUD_CONF0); |
---|
56 | 65 | hdmi_write(audio, (u8)~HDMI_MC_SWRSTZ_I2SSWRST_REQ, HDMI_MC_SWRSTZ); |
---|
57 | 66 | |
---|
58 | 67 | inputclkfs = HDMI_AUD_INPUTCLKFS_64FS; |
---|
.. | .. |
---|
132 | 141 | return 0; |
---|
133 | 142 | } |
---|
134 | 143 | |
---|
| 144 | +static int dw_hdmi_i2s_prepare(struct device *dev, void *data, |
---|
| 145 | + struct hdmi_codec_daifmt *fmt, |
---|
| 146 | + struct hdmi_codec_params *hparms) |
---|
| 147 | +{ |
---|
| 148 | + return dw_hdmi_i2s_hw_params(dev, data, fmt, hparms); |
---|
| 149 | +} |
---|
| 150 | + |
---|
135 | 151 | static int dw_hdmi_i2s_audio_startup(struct device *dev, void *data) |
---|
136 | 152 | { |
---|
137 | 153 | struct dw_hdmi_i2s_audio_data *audio = data; |
---|
.. | .. |
---|
198 | 214 | |
---|
199 | 215 | static struct hdmi_codec_ops dw_hdmi_i2s_ops = { |
---|
200 | 216 | .hw_params = dw_hdmi_i2s_hw_params, |
---|
| 217 | + .prepare = dw_hdmi_i2s_prepare, |
---|
201 | 218 | .audio_startup = dw_hdmi_i2s_audio_startup, |
---|
202 | 219 | .audio_shutdown = dw_hdmi_i2s_audio_shutdown, |
---|
203 | 220 | .get_eld = dw_hdmi_i2s_get_eld, |
---|