.. | .. |
---|
2583 | 2583 | } |
---|
2584 | 2584 | |
---|
2585 | 2585 | ret = gc2145_ioctl(sd, cmd, inf); |
---|
2586 | | - if (!ret) |
---|
| 2586 | + if (!ret) { |
---|
2587 | 2587 | ret = copy_to_user(up, inf, sizeof(*inf)); |
---|
| 2588 | + if (ret) |
---|
| 2589 | + ret = -EFAULT; |
---|
| 2590 | + } |
---|
2588 | 2591 | kfree(inf); |
---|
2589 | 2592 | break; |
---|
2590 | 2593 | case RKMODULE_AWB_CFG: |
---|
.. | .. |
---|
2597 | 2600 | ret = copy_from_user(cfg, up, sizeof(*cfg)); |
---|
2598 | 2601 | if (!ret) |
---|
2599 | 2602 | ret = gc2145_ioctl(sd, cmd, cfg); |
---|
| 2603 | + else |
---|
| 2604 | + ret = -EFAULT; |
---|
2600 | 2605 | kfree(cfg); |
---|
2601 | 2606 | break; |
---|
2602 | 2607 | case RKMODULE_SET_QUICK_STREAM: |
---|
2603 | 2608 | ret = copy_from_user(&stream, up, sizeof(u32)); |
---|
2604 | 2609 | if (!ret) |
---|
2605 | 2610 | ret = gc2145_ioctl(sd, cmd, &stream); |
---|
| 2611 | + else |
---|
| 2612 | + ret = -EFAULT; |
---|
2606 | 2613 | break; |
---|
2607 | 2614 | default: |
---|
2608 | 2615 | ret = -ENOIOCTLCMD; |
---|
.. | .. |
---|
2871 | 2878 | if (ret) |
---|
2872 | 2879 | dev_info(dev, "Failed to get power regulators\n"); |
---|
2873 | 2880 | |
---|
2874 | | - return __gc2145_power_on(gc2145); |
---|
| 2881 | + return ret; |
---|
2875 | 2882 | } |
---|
2876 | 2883 | |
---|
2877 | 2884 | static int gc2145_probe(struct i2c_client *client, |
---|
.. | .. |
---|
2915 | 2922 | |
---|
2916 | 2923 | ret = gc2145_parse_of(gc2145); |
---|
2917 | 2924 | if (ret != 0) |
---|
2918 | | - return -EINVAL; |
---|
2919 | | - |
---|
2920 | | - gc2145->xvclk_frequency = clk_get_rate(gc2145->xvclk); |
---|
2921 | | - if (gc2145->xvclk_frequency < 6000000 || |
---|
2922 | | - gc2145->xvclk_frequency > 27000000) |
---|
2923 | 2925 | return -EINVAL; |
---|
2924 | 2926 | |
---|
2925 | 2927 | v4l2_ctrl_handler_init(&gc2145->ctrls, 3); |
---|
.. | .. |
---|
2972 | 2974 | gc2145->fps = DIV_ROUND_CLOSEST(gc2145->framesize_cfg[0].max_fps.denominator, |
---|
2973 | 2975 | gc2145->framesize_cfg[0].max_fps.numerator); |
---|
2974 | 2976 | |
---|
| 2977 | + __gc2145_power_on(gc2145); |
---|
| 2978 | + gc2145->xvclk_frequency = clk_get_rate(gc2145->xvclk); |
---|
| 2979 | + if (gc2145->xvclk_frequency < 6000000 || |
---|
| 2980 | + gc2145->xvclk_frequency > 27000000) |
---|
| 2981 | + goto error; |
---|
| 2982 | + |
---|
2975 | 2983 | ret = gc2145_detect(gc2145); |
---|
2976 | 2984 | if (ret < 0) { |
---|
2977 | 2985 | dev_info(&client->dev, "Check id failed:\n" |
---|