aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/cx25821/cx25821-medusa-video.c53
1 files changed, 21 insertions, 32 deletions
diff --git a/drivers/staging/cx25821/cx25821-medusa-video.c b/drivers/staging/cx25821/cx25821-medusa-video.c
index 0bb33ba7e99d..34616dc507f9 100644
--- a/drivers/staging/cx25821/cx25821-medusa-video.c
+++ b/drivers/staging/cx25821/cx25821-medusa-video.c
@@ -778,9 +778,9 @@ int medusa_set_saturation(struct cx25821_dev *dev, int saturation, int decoder)
778 778
779int medusa_video_init(struct cx25821_dev *dev) 779int medusa_video_init(struct cx25821_dev *dev)
780{ 780{
781 u32 value = 0, tmp = 0; 781 u32 value, tmp = 0;
782 int ret_val = 0; 782 int ret_val;
783 int i = 0; 783 int i;
784 784
785 mutex_lock(&dev->lock); 785 mutex_lock(&dev->lock);
786 786
@@ -790,18 +790,15 @@ int medusa_video_init(struct cx25821_dev *dev)
790 value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp); 790 value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp);
791 value &= 0xFFFFF0FF; 791 value &= 0xFFFFF0FF;
792 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value); 792 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value);
793 if (ret_val < 0)
794 goto error;
793 795
794 if (ret_val < 0) {
795 mutex_unlock(&dev->lock);
796 return -EINVAL;
797 }
798 /* Turn off Master source switch enable */ 796 /* Turn off Master source switch enable */
799 value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp); 797 value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp);
800 value &= 0xFFFFFFDF; 798 value &= 0xFFFFFFDF;
801 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value); 799 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value);
802
803 if (ret_val < 0) 800 if (ret_val < 0)
804 return -EINVAL; 801 goto error;
805 802
806 mutex_unlock(&dev->lock); 803 mutex_unlock(&dev->lock);
807 804
@@ -815,31 +812,25 @@ int medusa_video_init(struct cx25821_dev *dev)
815 value &= 0xFF70FF70; 812 value &= 0xFF70FF70;
816 value |= 0x00090008; /* set en_active */ 813 value |= 0x00090008; /* set en_active */
817 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], DENC_AB_CTRL, value); 814 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], DENC_AB_CTRL, value);
815 if (ret_val < 0)
816 goto error;
818 817
819 if (ret_val < 0) {
820 mutex_unlock(&dev->lock);
821 return -EINVAL;
822 }
823 /* enable input is VIP/656 */ 818 /* enable input is VIP/656 */
824 value = cx25821_i2c_read(&dev->i2c_bus[0], BYP_AB_CTRL, &tmp); 819 value = cx25821_i2c_read(&dev->i2c_bus[0], BYP_AB_CTRL, &tmp);
825 value |= 0x00040100; /* enable VIP */ 820 value |= 0x00040100; /* enable VIP */
826 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], BYP_AB_CTRL, value); 821 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], BYP_AB_CTRL, value);
827 822
828 if (ret_val < 0) { 823 if (ret_val < 0)
829 mutex_unlock(&dev->lock); 824 goto error;
830 return -EINVAL; 825
831 }
832 /* select AFE clock to output mode */ 826 /* select AFE clock to output mode */
833 value = cx25821_i2c_read(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL, &tmp); 827 value = cx25821_i2c_read(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL, &tmp);
834 value &= 0x83FFFFFF; 828 value &= 0x83FFFFFF;
835 ret_val = 829 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL,
836 cx25821_i2c_write(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL, 830 value | 0x10000000);
837 value | 0x10000000); 831 if (ret_val < 0)
832 goto error;
838 833
839 if (ret_val < 0) {
840 mutex_unlock(&dev->lock);
841 return -EINVAL;
842 }
843 /* Turn on all of the data out and control output pins. */ 834 /* Turn on all of the data out and control output pins. */
844 value = cx25821_i2c_read(&dev->i2c_bus[0], PIN_OE_CTRL, &tmp); 835 value = cx25821_i2c_read(&dev->i2c_bus[0], PIN_OE_CTRL, &tmp);
845 value &= 0xFEF0FE00; 836 value &= 0xFEF0FE00;
@@ -858,17 +849,15 @@ int medusa_video_init(struct cx25821_dev *dev)
858 849
859 value |= 7; 850 value |= 7;
860 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], PIN_OE_CTRL, value); 851 ret_val = cx25821_i2c_write(&dev->i2c_bus[0], PIN_OE_CTRL, value);
861 if (ret_val < 0) { 852 if (ret_val < 0)
862 mutex_unlock(&dev->lock); 853 goto error;
863 return -EINVAL;
864 }
865 854
866 mutex_unlock(&dev->lock); 855 mutex_unlock(&dev->lock);
867 856
868 ret_val = medusa_set_videostandard(dev); 857 ret_val = medusa_set_videostandard(dev);
858 return ret_val;
869 859
870 if (ret_val < 0) 860error:
871 return -EINVAL; 861 mutex_unlock(&dev->lock);
872 862 return ret_val;
873 return 1;
874} 863}