107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani/*
207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *  Copyright (c) 2014, The Linux Foundation. All rights reserved.
307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *
407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * Redistribution and use in source and binary forms, with or without
507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * modification, are permitted provided that the following conditions are
607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * met:
707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *     * Redistributions of source code must retain the above copyright
807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *       notice, this list of conditions and the following disclaimer.
907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *     * Redistributions in binary form must reproduce the above
1007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *       copyright notice, this list of conditions and the following
1107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *       disclaimer in the documentation and/or other materials provided
1207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *       with the distribution.
1307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *     * Neither the name of The Linux Foundation nor the names of its
1407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *       contributors may be used to endorse or promote products derived
1507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *       from this software without specific prior written permission.
1607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani *
1707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
1807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
2007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
2107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
2407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
2607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
2707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani */
2907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
3007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <hwc_qdcm.h>
3107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <hwc_utils.h>
3207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <utils/String16.h>
3307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include <mdp_version.h>
3407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include "mode_manager.h"
3507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include "libmm-disp-apis.h"
3607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani#include "IQService.h"
3707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
3807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaniusing namespace android;
3907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaniusing namespace qService;
4007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaniusing namespace qhwc;
4107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaniusing namespace qmode;
4207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
4307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malaninamespace qQdcm {
4407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani//----------------------------------------------------------------------------
4507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid qdcmInitContext(hwc_context_t *ctx)
4607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
4707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    loadQdcmLibrary(ctx);
4807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
4907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
5007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid qdcmCloseContext(hwc_context_t *ctx)
5107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
5207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode) {
5307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        unloadQdcmLibrary(ctx);
5407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
5507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
5607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
5707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid qdcmApplyDefaultAfterBootAnimationDone(hwc_context_t *ctx)
5807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
5907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode)
6007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ctx->mQdcmInfo.mQdcmMode->applyDefaultMode(0);
6107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
6207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
6307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmSetActiveMode(hwc_context_t *ctx, const Parcel *in, Parcel *out)
6407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
6507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
6607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
6707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
6807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
6907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        struct SET_MODE_PROP_IN params =
7007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                           { (disp_id_type)in->readInt32(), in->readInt32()};
7107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
7207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_SET_ACTIVE_MODE,
7307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (void *)&params, (void *)NULL);
7407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
7507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
7607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
7707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
7807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
7907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmSetDefaultMode(hwc_context_t *ctx, const Parcel *in, Parcel *out)
8007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
8107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
8207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
8307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
8407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
8507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        struct SET_MODE_PROP_IN params =
8607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                          { (disp_id_type)in->readInt32(), in->readInt32()};
8707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
8807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_SET_DEFAULT_MODE,
8907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (void *)&params, (void *)NULL);
9007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
9107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
9207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
9307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
9407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
9507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmGetDefaultMode(hwc_context_t *ctx,
9607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                                            const Parcel *in, Parcel *out)
9707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
9807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
9907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
10007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
10107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
10207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        int params = in->readInt32();
10307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        int modeid = 0;
10407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
10507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_GET_DEFAULT_MODE,
10607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (const void *)&params, (void *)&modeid);
10707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
10807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(modeid);
10907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
11007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
11107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
11207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
11307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmGetColorBalanceRange(hwc_context_t *ctx __unused,
11407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                const Parcel *in __unused, Parcel *out __unused)
11507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
11607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
11707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
11807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmGetColorBalance(hwc_context_t *ctx,
11907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                                            const Parcel *in, Parcel *out)
12007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
12107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
12207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
12307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
12407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
12507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        int params = in->readInt32();
12607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        int warmness = 0;
12707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
12807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_GET_CB,
12907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (const void *)&params, (void *)&warmness);
13007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
13107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(warmness);
13207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
13307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
13407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
13507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
13607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmSetColorBalance(hwc_context_t *ctx,
13707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                                            const Parcel *in, Parcel *out)
13807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
13907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
14007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
14107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
14207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
14307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        struct SET_CB_IN params =
14407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                           { (disp_id_type)in->readInt32(), in->readInt32() };
14507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
14607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ALOGD_IF(QDCM_DEBUG, "%s dispID = %d, warmness = %d\n",
14707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                __FUNCTION__, params.id, params.warmness);
14807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
14907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_SET_CB,
15007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (const void *)&params, NULL);
15107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
15207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
15307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
15407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
15507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
15607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmSaveModeV2(hwc_context_t *ctx, const Parcel *in, Parcel *out)
15707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
15807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
15907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
16007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
16107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
16207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        struct SAVE_DISPLAY_MODE_V2_IN params =
16307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                     { (disp_id_type)in->readInt32(),
16407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                                     in->readCString(),
16507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                           (uint32_t)in->readInt32(),
16607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                                     in->readInt32()
16707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                     };
16807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        int value = 0;
16907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
17007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_SAVE_MODE_V2,
17107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (const void *)&params, (void *)&value);
17207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
17307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value);
17407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
17507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
17607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
17707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
17807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmSetPaConfig(hwc_context_t *ctx, const Parcel *in, Parcel *out)
17907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
18007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
18107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
18207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
18307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
18407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        struct SET_PA_CONFIG_IN params;
18507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
18607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        params.id = (disp_id_type)in->readInt32();
18707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        params.pa.ops = in->readInt32();
18807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        params.pa.data.hue = in->readInt32();
18907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        params.pa.data.saturation = in->readInt32();
19007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        params.pa.data.value = in->readInt32();
19107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        params.pa.data.contrast = in->readInt32();
19207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        params.pa.data.sat_thresh = in->readInt32();
19307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
19407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_SET_PA_CONFIG,
19507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (const void *)&params, NULL);
19607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
19707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
19807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
19907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
20007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
20107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmGetPaConfig(hwc_context_t *ctx, const Parcel *in, Parcel *out)
20207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
20307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
20407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
20507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
20607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
20707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        int params = in->readInt32();
20807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        struct disp_pa_config value;
20907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
21007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_GET_PA_CONFIG,
21107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (const void *)&params, (void *)&value);
21207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
21307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.ops);
21407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.data.hue);
21507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.data.saturation);
21607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.data.value);
21707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.data.contrast);
21807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.data.sat_thresh);
21907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
22007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
22107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
22207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
22307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
22407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanistatic void qdcmGetPaRange(hwc_context_t *ctx, const Parcel *in, Parcel *out)
22507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
22607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int ret = 0;
22707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
22807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    if (ctx->mQdcmInfo.mQdcmMode && in && out) {
22907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
23007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        int params = in->readInt32();
23107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        struct disp_pa_range value;
23207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
23307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        ret = ctx->mQdcmInfo.mQdcmMode->requestRoute((int)CMD_GET_PA_RANGE,
23407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani                (const void *)&params, (void *)&value);
23507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
23607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.max.hue);
23707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.max.saturation);
23807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.max.value);
23907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.max.contrast);
24007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.max.sat_thresh);
24107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.min.hue);
24207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.min.saturation);
24307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.min.value);
24407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.min.contrast);
24507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(value.min.sat_thresh);
24607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
24707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        out->writeInt32(ret);  //return operation status via binder.
24807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
24907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
25007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
25107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malanivoid qdcmCmdsHandler(hwc_context_t *ctx, const Parcel *in, Parcel *out)
25207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani{
25307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    int subcmd = in->readInt32();
25407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
25507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    ALOGD_IF(QDCM_DEBUG, "%s enter subcmd = %d\n", __FUNCTION__, subcmd);
25607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    switch (subcmd) {
25707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_SET_ACTIVE_MODE:
25807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmSetActiveMode(ctx, in, out);
25907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
26007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_SET_DEFAULT_MODE:
26107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmSetDefaultMode(ctx, in, out);
26207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
26307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_GET_DEFAULT_MODE:
26407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmGetDefaultMode(ctx, in, out);
26507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
26607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_GET_CB_RANGE:
26707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmGetColorBalanceRange(ctx, in, out);
26807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
26907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_GET_CB:
27007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmGetColorBalance(ctx, in, out);
27107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
27207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_SET_CB:
27307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmSetColorBalance(ctx, in, out);
27407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
27507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_SAVE_MODE_V2:
27607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmSaveModeV2(ctx, in, out);
27707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
27807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_SET_PA_CONFIG:
27907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmSetPaConfig(ctx, in, out);
28007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
28107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_GET_PA_CONFIG:
28207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmGetPaConfig(ctx, in, out);
28307bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
28407bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani        case CMD_GET_PA_RANGE:
28507bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            qdcmGetPaRange(ctx, in, out);
28607bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani            break;
28707bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani    }
28807bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani}
28907bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
29007bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
29107bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani} //namespace qQdcm
29207bbf1e89c031a5d41a7561433e832d396c311a5Prashant Malani
293