https://github.com/torvalds/linux
Revision c0a20263dbe1fc5f394913d71063c9cd8282c5db authored by Takashi Iwai on 10 June 2011, 13:28:15 UTC, committed by Takashi Iwai on 10 June 2011, 13:28:15 UTC
Some Reatlek model quirks use master_mute bool switch for controlling
the master-mute of outputs.  For these cases, the initialization of HP
pins/amps were forgotten during the transition to the common automute
helper function in 3.0 development time, and resulted in the muted HP
output as default.

This patch fixes the issue by adjusting the HP output explicitly with
master_mute switch.

Tested-by: Michal Hocko <mhocko@suse.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent 20f5e0b
Raw File
Tip revision: c0a20263dbe1fc5f394913d71063c9cd8282c5db authored by Takashi Iwai on 10 June 2011, 13:28:15 UTC
ALSA: hda - Fix initialization of hp pins with master_mute in Realtek
Tip revision: c0a2026
sysv68.c
/*
 *  fs/partitions/sysv68.c
 *
 *  Copyright (C) 2007 Philippe De Muyter <phdm@macqel.be>
 */

#include "check.h"
#include "sysv68.h"

/*
 *	Volume ID structure: on first 256-bytes sector of disk
 */

struct volumeid {
	u8	vid_unused[248];
	u8	vid_mac[8];	/* ASCII string "MOTOROLA" */
};

/*
 *	config block: second 256-bytes sector on disk
 */

struct dkconfig {
	u8	ios_unused0[128];
	__be32	ios_slcblk;	/* Slice table block number */
	__be16	ios_slccnt;	/* Number of entries in slice table */
	u8	ios_unused1[122];
};

/*
 *	combined volumeid and dkconfig block
 */

struct dkblk0 {
	struct volumeid dk_vid;
	struct dkconfig dk_ios;
};

/*
 *	Slice Table Structure
 */

struct slice {
	__be32	nblocks;		/* slice size (in blocks) */
	__be32	blkoff;			/* block offset of slice */
};


int sysv68_partition(struct parsed_partitions *state)
{
	int i, slices;
	int slot = 1;
	Sector sect;
	unsigned char *data;
	struct dkblk0 *b;
	struct slice *slice;
	char tmp[64];

	data = read_part_sector(state, 0, &sect);
	if (!data)
		return -1;

	b = (struct dkblk0 *)data;
	if (memcmp(b->dk_vid.vid_mac, "MOTOROLA", sizeof(b->dk_vid.vid_mac))) {
		put_dev_sector(sect);
		return 0;
	}
	slices = be16_to_cpu(b->dk_ios.ios_slccnt);
	i = be32_to_cpu(b->dk_ios.ios_slcblk);
	put_dev_sector(sect);

	data = read_part_sector(state, i, &sect);
	if (!data)
		return -1;

	slices -= 1; /* last slice is the whole disk */
	snprintf(tmp, sizeof(tmp), "sysV68: %s(s%u)", state->name, slices);
	strlcat(state->pp_buf, tmp, PAGE_SIZE);
	slice = (struct slice *)data;
	for (i = 0; i < slices; i++, slice++) {
		if (slot == state->limit)
			break;
		if (be32_to_cpu(slice->nblocks)) {
			put_partition(state, slot,
				be32_to_cpu(slice->blkoff),
				be32_to_cpu(slice->nblocks));
			snprintf(tmp, sizeof(tmp), "(s%u)", i);
			strlcat(state->pp_buf, tmp, PAGE_SIZE);
		}
		slot++;
	}
	strlcat(state->pp_buf, "\n", PAGE_SIZE);
	put_dev_sector(sect);
	return 1;
}
back to top