Subversion Repositories Kolibri OS

Rev

Rev 3192 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3192 Rev 3764
Line 55... Line 55...
55
/*
55
/*
56
 * check if the chipset is supported
56
 * check if the chipset is supported
57
 */
57
 */
58
static int r600_audio_chipset_supported(struct radeon_device *rdev)
58
static int r600_audio_chipset_supported(struct radeon_device *rdev)
59
{
59
{
60
	return (rdev->family >= CHIP_R600 && !ASIC_IS_DCE6(rdev))
60
	return ASIC_IS_DCE2(rdev) && !ASIC_IS_DCE6(rdev);
61
		|| rdev->family == CHIP_RS600
-
 
62
		|| rdev->family == CHIP_RS690
-
 
63
		|| rdev->family == CHIP_RS740;
-
 
64
}
61
}
Line 65... Line 62...
65
 
62
 
66
struct r600_audio r600_audio_status(struct radeon_device *rdev)
63
struct r600_audio r600_audio_status(struct radeon_device *rdev)
67
{
64
{
Line 182... Line 179...
182
 
179
 
183
	return 0;
180
	return 0;
Line 184... Line 181...
184
}
181
}
185
 
-
 
186
/*
-
 
187
 * atach the audio codec to the clock source of the encoder
-
 
188
 */
-
 
189
void r600_audio_set_clock(struct drm_encoder *encoder, int clock)
-
 
190
{
-
 
191
	struct drm_device *dev = encoder->dev;
-
 
192
	struct radeon_device *rdev = dev->dev_private;
-
 
193
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
-
 
194
	struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
-
 
195
	struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc);
-
 
196
	int base_rate = 48000;
-
 
197
 
-
 
198
	switch (radeon_encoder->encoder_id) {
-
 
199
	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
-
 
200
	case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
-
 
201
		WREG32_P(R600_AUDIO_TIMING, 0, ~0x301);
-
 
202
		break;
-
 
203
	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
-
 
204
	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
-
 
205
	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
-
 
206
	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
-
 
207
		WREG32_P(R600_AUDIO_TIMING, 0x100, ~0x301);
-
 
208
		break;
-
 
209
	default:
-
 
210
		dev_err(rdev->dev, "Unsupported encoder type 0x%02X\n",
-
 
211
			  radeon_encoder->encoder_id);
-
 
212
		return;
-
 
213
	}
-
 
214
 
-
 
215
	if (ASIC_IS_DCE4(rdev)) {
-
 
216
		/* TODO: other PLLs? */
-
 
217
		WREG32(EVERGREEN_AUDIO_PLL1_MUL, base_rate * 10);
-
 
218
		WREG32(EVERGREEN_AUDIO_PLL1_DIV, clock * 10);
-
 
219
		WREG32(EVERGREEN_AUDIO_PLL1_UNK, 0x00000071);
-
 
220
 
-
 
221
		/* Select DTO source */
-
 
222
		WREG32(0x5ac, radeon_crtc->crtc_id);
-
 
223
	} else {
-
 
224
	switch (dig->dig_encoder) {
-
 
225
	case 0:
-
 
226
		WREG32(R600_AUDIO_PLL1_MUL, base_rate * 50);
-
 
227
		WREG32(R600_AUDIO_PLL1_DIV, clock * 100);
-
 
228
		WREG32(R600_AUDIO_CLK_SRCSEL, 0);
-
 
229
		break;
-
 
230
 
-
 
231
	case 1:
-
 
232
		WREG32(R600_AUDIO_PLL2_MUL, base_rate * 50);
-
 
233
		WREG32(R600_AUDIO_PLL2_DIV, clock * 100);
-
 
234
		WREG32(R600_AUDIO_CLK_SRCSEL, 1);
-
 
235
		break;
-
 
236
	default:
-
 
237
			dev_err(rdev->dev,
-
 
238
				"Unsupported DIG on encoder 0x%02X\n",
-
 
239
			  radeon_encoder->encoder_id);
-
 
240
		return;
-
 
241
	}
-
 
242
	}
-
 
243
}
-
 
244
 
182
 
245
/*
183
/*
246
 * release the audio timer
184
 * release the audio timer
247
 * TODO: How to do this correctly on SMP systems?
185
 * TODO: How to do this correctly on SMP systems?
248
 */
186
 */