diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2008-05-03 17:20:21 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-05-14 01:54:04 -0400 |
commit | d35fccaffd095e79691cd07a49a36867cb275b72 (patch) | |
tree | a9b6995cc39827cf486c70e6b3aab1ca11df8a57 | |
parent | dc9d522a1358bfb87e9ed8718cc1e4d5141a5468 (diff) |
V4L/DVB (7837): tda18271: fix error handling in init and sleep paths
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | drivers/media/common/tuners/tda18271-common.c | 7 | ||||
-rw-r--r-- | drivers/media/common/tuners/tda18271-fe.c | 38 |
2 files changed, 27 insertions, 18 deletions
diff --git a/drivers/media/common/tuners/tda18271-common.c b/drivers/media/common/tuners/tda18271-common.c index e27a7620a32f..9001d422cc1c 100644 --- a/drivers/media/common/tuners/tda18271-common.c +++ b/drivers/media/common/tuners/tda18271-common.c | |||
@@ -227,9 +227,8 @@ int tda18271_charge_pump_source(struct dvb_frontend *fe, | |||
227 | 227 | ||
228 | regs[r_cp] &= ~0x20; | 228 | regs[r_cp] &= ~0x20; |
229 | regs[r_cp] |= ((force & 1) << 5); | 229 | regs[r_cp] |= ((force & 1) << 5); |
230 | tda18271_write_regs(fe, r_cp, 1); | ||
231 | 230 | ||
232 | return 0; | 231 | return tda18271_write_regs(fe, r_cp, 1); |
233 | } | 232 | } |
234 | 233 | ||
235 | int tda18271_init_regs(struct dvb_frontend *fe) | 234 | int tda18271_init_regs(struct dvb_frontend *fe) |
@@ -494,9 +493,7 @@ int tda18271_set_standby_mode(struct dvb_frontend *fe, | |||
494 | sm_lt ? (1 << 6) : 0 | | 493 | sm_lt ? (1 << 6) : 0 | |
495 | sm_xt ? (1 << 5) : 0; | 494 | sm_xt ? (1 << 5) : 0; |
496 | 495 | ||
497 | tda18271_write_regs(fe, R_EP3, 1); | 496 | return tda18271_write_regs(fe, R_EP3, 1); |
498 | |||
499 | return 0; | ||
500 | } | 497 | } |
501 | 498 | ||
502 | /*---------------------------------------------------------------------*/ | 499 | /*---------------------------------------------------------------------*/ |
diff --git a/drivers/media/common/tuners/tda18271-fe.c b/drivers/media/common/tuners/tda18271-fe.c index b262100ae897..46c080089eb0 100644 --- a/drivers/media/common/tuners/tda18271-fe.c +++ b/drivers/media/common/tuners/tda18271-fe.c | |||
@@ -719,45 +719,56 @@ static int tda18271_ir_cal_init(struct dvb_frontend *fe) | |||
719 | { | 719 | { |
720 | struct tda18271_priv *priv = fe->tuner_priv; | 720 | struct tda18271_priv *priv = fe->tuner_priv; |
721 | unsigned char *regs = priv->tda18271_regs; | 721 | unsigned char *regs = priv->tda18271_regs; |
722 | int ret; | ||
722 | 723 | ||
723 | tda18271_read_regs(fe); | 724 | ret = tda18271_read_regs(fe); |
725 | if (ret < 0) | ||
726 | goto fail; | ||
724 | 727 | ||
725 | /* test IR_CAL_OK to see if we need init */ | 728 | /* test IR_CAL_OK to see if we need init */ |
726 | if ((regs[R_EP1] & 0x08) == 0) | 729 | if ((regs[R_EP1] & 0x08) == 0) |
727 | tda18271_init_regs(fe); | 730 | ret = tda18271_init_regs(fe); |
728 | 731 | fail: | |
729 | return 0; | 732 | return ret; |
730 | } | 733 | } |
731 | 734 | ||
732 | static int tda18271_init(struct dvb_frontend *fe) | 735 | static int tda18271_init(struct dvb_frontend *fe) |
733 | { | 736 | { |
734 | struct tda18271_priv *priv = fe->tuner_priv; | 737 | struct tda18271_priv *priv = fe->tuner_priv; |
738 | int ret; | ||
735 | 739 | ||
736 | mutex_lock(&priv->lock); | 740 | mutex_lock(&priv->lock); |
737 | 741 | ||
738 | /* power up */ | 742 | /* power up */ |
739 | tda18271_set_standby_mode(fe, 0, 0, 0); | 743 | ret = tda18271_set_standby_mode(fe, 0, 0, 0); |
744 | if (ret < 0) | ||
745 | goto fail; | ||
740 | 746 | ||
741 | /* initialization */ | 747 | /* initialization */ |
742 | tda18271_ir_cal_init(fe); | 748 | ret = tda18271_ir_cal_init(fe); |
749 | if (ret < 0) | ||
750 | goto fail; | ||
743 | 751 | ||
744 | if (priv->id == TDA18271HDC2) | 752 | if (priv->id == TDA18271HDC2) |
745 | tda18271c2_rf_cal_init(fe); | 753 | tda18271c2_rf_cal_init(fe); |
746 | 754 | fail: | |
747 | mutex_unlock(&priv->lock); | 755 | mutex_unlock(&priv->lock); |
748 | 756 | ||
749 | return 0; | 757 | return ret; |
750 | } | 758 | } |
751 | 759 | ||
752 | static int tda18271_tune(struct dvb_frontend *fe, | 760 | static int tda18271_tune(struct dvb_frontend *fe, |
753 | struct tda18271_std_map_item *map, u32 freq, u32 bw) | 761 | struct tda18271_std_map_item *map, u32 freq, u32 bw) |
754 | { | 762 | { |
755 | struct tda18271_priv *priv = fe->tuner_priv; | 763 | struct tda18271_priv *priv = fe->tuner_priv; |
764 | int ret; | ||
756 | 765 | ||
757 | tda_dbg("freq = %d, ifc = %d, bw = %d, agc_mode = %d, std = %d\n", | 766 | tda_dbg("freq = %d, ifc = %d, bw = %d, agc_mode = %d, std = %d\n", |
758 | freq, map->if_freq, bw, map->agc_mode, map->std); | 767 | freq, map->if_freq, bw, map->agc_mode, map->std); |
759 | 768 | ||
760 | tda18271_init(fe); | 769 | ret = tda18271_init(fe); |
770 | if (ret < 0) | ||
771 | goto fail; | ||
761 | 772 | ||
762 | mutex_lock(&priv->lock); | 773 | mutex_lock(&priv->lock); |
763 | 774 | ||
@@ -772,8 +783,8 @@ static int tda18271_tune(struct dvb_frontend *fe, | |||
772 | tda18271_channel_configuration(fe, map, freq, bw); | 783 | tda18271_channel_configuration(fe, map, freq, bw); |
773 | 784 | ||
774 | mutex_unlock(&priv->lock); | 785 | mutex_unlock(&priv->lock); |
775 | 786 | fail: | |
776 | return 0; | 787 | return ret; |
777 | } | 788 | } |
778 | 789 | ||
779 | /* ------------------------------------------------------------------ */ | 790 | /* ------------------------------------------------------------------ */ |
@@ -905,16 +916,17 @@ fail: | |||
905 | static int tda18271_sleep(struct dvb_frontend *fe) | 916 | static int tda18271_sleep(struct dvb_frontend *fe) |
906 | { | 917 | { |
907 | struct tda18271_priv *priv = fe->tuner_priv; | 918 | struct tda18271_priv *priv = fe->tuner_priv; |
919 | int ret; | ||
908 | 920 | ||
909 | mutex_lock(&priv->lock); | 921 | mutex_lock(&priv->lock); |
910 | 922 | ||
911 | /* standby mode w/ slave tuner output | 923 | /* standby mode w/ slave tuner output |
912 | * & loop thru & xtal oscillator on */ | 924 | * & loop thru & xtal oscillator on */ |
913 | tda18271_set_standby_mode(fe, 1, 0, 0); | 925 | ret = tda18271_set_standby_mode(fe, 1, 0, 0); |
914 | 926 | ||
915 | mutex_unlock(&priv->lock); | 927 | mutex_unlock(&priv->lock); |
916 | 928 | ||
917 | return 0; | 929 | return ret; |
918 | } | 930 | } |
919 | 931 | ||
920 | static int tda18271_release(struct dvb_frontend *fe) | 932 | static int tda18271_release(struct dvb_frontend *fe) |