| .. | .. |
|---|
| 53 | 53 | { .reg = 0x09, .def = 0x0000 } |
|---|
| 54 | 54 | }; |
|---|
| 55 | 55 | |
|---|
| 56 | +/* |
|---|
| 57 | + * ssm2602 register patch |
|---|
| 58 | + * Workaround for playback distortions after power up: activates digital |
|---|
| 59 | + * core, and then powers on output, DAC, and whole chip at the same time |
|---|
| 60 | + */ |
|---|
| 61 | + |
|---|
| 62 | +static const struct reg_sequence ssm2602_patch[] = { |
|---|
| 63 | + { SSM2602_ACTIVE, 0x01 }, |
|---|
| 64 | + { SSM2602_PWR, 0x07 }, |
|---|
| 65 | + { SSM2602_RESET, 0x00 }, |
|---|
| 66 | +}; |
|---|
| 67 | + |
|---|
| 56 | 68 | |
|---|
| 57 | 69 | /*Appending several "None"s just for OSS mixer use*/ |
|---|
| 58 | 70 | static const char *ssm2602_input_select[] = { |
|---|
| .. | .. |
|---|
| 589 | 601 | return ret; |
|---|
| 590 | 602 | } |
|---|
| 591 | 603 | |
|---|
| 604 | + regmap_register_patch(ssm2602->regmap, ssm2602_patch, |
|---|
| 605 | + ARRAY_SIZE(ssm2602_patch)); |
|---|
| 606 | + |
|---|
| 592 | 607 | /* set the update bits */ |
|---|
| 593 | 608 | regmap_update_bits(ssm2602->regmap, SSM2602_LINVOL, |
|---|
| 594 | 609 | LINVOL_LRIN_BOTH, LINVOL_LRIN_BOTH); |
|---|