コード例 #1
0
static int __init hs_rpc_cb_init(void)
{
	int rc = 0;

	/* version 2 is used in 7x30 */
	rpc_client = msm_rpc_register_client("hs",
			HS_RPC_PROG, HS_RPC_VERS_2, 0, hs_cb_func);

	if (IS_ERR(rpc_client)) {
		pr_err("%s: couldn't open rpc client with version 2 err %ld\n",
			 __func__, PTR_ERR(rpc_client));
		/*version 1 is used in 7x27, 8x50 */
		rpc_client = msm_rpc_register_client("hs",
			HS_RPC_PROG, HS_RPC_VERS_1, 0, hs_cb_func);
	}

	if (IS_ERR(rpc_client)) {
		pr_err("%s: couldn't open rpc client with version 1 err %ld\n",
			 __func__, PTR_ERR(rpc_client));
		return PTR_ERR(rpc_client);
	}
	rc = msm_rpc_client_req(rpc_client, HS_SUBSCRIBE_SRVC_PROC,
				hs_rpc_register_subs_arg, NULL,
				hs_rpc_register_subs_res, NULL, -1);
	if (rc) {
		pr_err("%s: couldn't send rpc client request\n", __func__);
		msm_rpc_unregister_client(rpc_client);
	}

	return rc;
}
コード例 #2
0
ファイル: rpc_pmapp.c プロジェクト: PyYoshi/is01_froyo_kernel
int msm_pm_app_rpc_init(void)
{

#if 1
	/* allow qsd8650 */
#else
	if (!machine_is_qsd8x50_ffa() && !machine_is_msm7x27_ffa())
		return -ENOTSUPP;
#endif

	boost_vreg = vreg_get(NULL, "boost");
	if (IS_ERR(boost_vreg)) {
		pr_err("%s: boost vreg get failed\n", __func__);
		return PTR_ERR(boost_vreg);
	}

	usb_vreg = vreg_get(NULL, "usb");
	if (IS_ERR(usb_vreg)) {
		pr_err("%s: usb vreg get failed\n", __func__);
		vreg_put(usb_vreg);
		return PTR_ERR(usb_vreg);
	}

	client = msm_rpc_register_client("pmapp_usb",
			PM_APP_USB_PROG,
			PM_APP_USB_VERS_2_1, 1,
			pm_app_usb_cb_func);
	if (!IS_ERR(client)) {
		rpc_pmapp_init_rpc_ids(PM_APP_USB_VERS_2_1);
		goto done;
	}

	client = msm_rpc_register_client("pmapp_usb",
			PM_APP_USB_PROG,
			PM_APP_USB_VERS_1_2, 1,
			pm_app_usb_cb_func);
	if (!IS_ERR(client)) {
		rpc_pmapp_init_rpc_ids(PM_APP_USB_VERS_1_2);
		goto done;
	}

	client = msm_rpc_register_client("pmapp_usb",
			PM_APP_USB_PROG,
			PM_APP_USB_VERS_1_1, 1,
			pm_app_usb_cb_func);
	if (!IS_ERR(client))
		rpc_pmapp_init_rpc_ids(PM_APP_USB_VERS_1_1);
	else
		return PTR_ERR(client);

done:
	return 0;
}
コード例 #3
0
struct msm_rpc_client *msm_pm_vbatt_init_client(
	char *name,
	u32 create_thread,
	int (*cb_func)(struct msm_rpc_client *, void *, int),
	u32 *version)
{
	int i;
	struct msm_rpc_client *clnt;

	for (i = 0; i < ARRAY_SIZE(battery_valid_rpc_vers); i++) {
		clnt = msm_rpc_register_client(name,
			BATTERY_RPC_PROG,
			battery_valid_rpc_vers[i],
			create_thread,
			cb_func);
		if (NULL == clnt) {
			pr_err("%s: FAIL: rpc_register_client. batt_client=NULL\n",
			       __func__);
			return NULL;
		} else if (IS_ERR(clnt))
			continue;
		else {
			if (NULL != version)
				*version = battery_valid_rpc_vers[i];
			break;
		}
	}

	if (IS_ERR(clnt))
		clnt = NULL;

	return clnt;
}
コード例 #4
0
static int __devinit dev_dct_probe(struct platform_device *pdev)
{
    int ret = 0;

	hw_dev_rpc_client =
		msm_rpc_register_client("dev_dct", BATTERY_RPC_PROG,
					BATTERY_RPC_VER_2_1,
					1, NULL);

	if ( NULL == hw_dev_rpc_client ) 
    {
		printk("%s: FAIL: rpc_register_client. hw_dev_rpc_client=NULL\n",
		       __func__);
		return -ENODEV;
    }

    ret = hw_rpc_set_dev_flag();
    if( ret < 0 )
    {
        printk("%s: set hw dev detect flag failed.\n", __func__ );
    }

	return 0;
    
}
コード例 #5
0
ファイル: rpc_pmapp.c プロジェクト: CL0SeY/i957kernel
int msm_pm_app_rpc_init(void (*callback)(int online))
{
	uint32_t cb_id, rc;

	if (!machine_is_qsd8x50_ffa() && !machine_is_qsd8x50a_ffa()
			&& !machine_is_msm7x27_ffa())
		return -ENOTSUPP;

	client = msm_rpc_register_client("pmapp_usb",
			PMAPP_RPC_PROG,
			PMAPP_RPC_VER_2_1, 1,
			pm_app_usb_cb_func);
	if (!IS_ERR(client)) {
		rpc_pmapp_init_rpc_ids(PMAPP_RPC_VER_2_1);
		goto done;
	}

	client = msm_rpc_register_client("pmapp_usb",
			PMAPP_RPC_PROG,
			PMAPP_RPC_VER_1_2, 1,
			pm_app_usb_cb_func);
	if (!IS_ERR(client)) {
		rpc_pmapp_init_rpc_ids(PMAPP_RPC_VER_1_2);
		goto done;
	}

	client = msm_rpc_register_client("pmapp_usb",
			PMAPP_RPC_PROG,
			PMAPP_RPC_VER_1_1, 1,
			pm_app_usb_cb_func);
	if (!IS_ERR(client))
		rpc_pmapp_init_rpc_ids(PMAPP_RPC_VER_1_1);
	else
		return PTR_ERR(client);

done:
	cb_id = msm_rpc_add_cb_func(client, (void *)callback);
	/* In case of NULL callback funtion, cb_id would be -1 */
	if ((int) cb_id < -1)
		return cb_id;
	rc =  msm_rpc_client_req(client,
		rpc_ids.reg_for_vbus_valid,
			vbus_sess_valid_arg_cb,
				&cb_id, NULL, NULL, -1);
	return rc;
}
コード例 #6
0
ファイル: gp2a_rpc.c プロジェクト: Oleg-k/Cranium_Kernel
int __devinit msm_lightsensor_init_rpc(void)
{
  	int rc = 0;

	light_client =
		msm_rpc_register_client("lightsensor", LIGHTSENSOR_RPC_PROG,
					BATTERY_RPC_VER_4_1,
					1, msm_lightsensor_cb_func);

	if (light_client == NULL) {
		pr_err("%s: FAIL: rpc_register_client. light_client=NULL\n",
		       __func__);
		return -ENODEV;
	} else if (IS_ERR(light_client)) {
		light_client =
			msm_rpc_register_client("lightsensor", LIGHTSENSOR_RPC_PROG,
						BATTERY_RPC_VER_1_1,
						1, msm_lightsensor_cb_func);
		batt_api_version =  BATTERY_RPC_VER_1_1;
	} else {
		light_client =
	      	msm_rpc_register_client("lightsensor", LIGHTSENSOR_RPC_PROG,
		      			BATTERY_RPC_VER_2_1,
			      		1, msm_lightsensor_cb_func);	
		batt_api_version =  BATTERY_RPC_VER_2_1;
	}

  	if (IS_ERR(light_client)) {
		light_client=
			msm_rpc_register_client("lightsensor", LIGHTSENSOR_RPC_PROG,
						BATTERY_RPC_VER_5_1,
						1, msm_lightsensor_cb_func);
		batt_api_version =  BATTERY_RPC_VER_5_1;
	}

	if (IS_ERR(light_client)) {
		rc = PTR_ERR(light_client);
		pr_err("%s: ERROR: rpc_register_client: rc = %d\n ",
		       __func__, rc);
		light_client = NULL;
		return rc;
	}

  return rc;
}
コード例 #7
0
int msm_ear_init_rpc(void)
{
	int rc = 0;

	ear_client =
		msm_rpc_register_client("sec_jack", EAR_RPC_PROG,
					BATTERY_RPC_VER_2_1,
					1, msm_ear_cb_func);

	if (ear_client == NULL) {
		pr_err("%s: FAIL: rpc_register_client. ear_client=NULL\n",
		       __func__);
		return -ENODEV;
	} else if (IS_ERR(ear_client)) {
		ear_client =
			msm_rpc_register_client("sec_jack", EAR_RPC_PROG,
						BATTERY_RPC_VER_1_1,
						1, msm_ear_cb_func);
		ear_batt_api_version =  BATTERY_RPC_VER_1_1;
	} else
		ear_batt_api_version =  BATTERY_RPC_VER_2_1;

	if (IS_ERR(ear_client)) {
		ear_client =
			msm_rpc_register_client("sec_jack", EAR_RPC_PROG,
						BATTERY_RPC_VER_5_1,
						1, msm_ear_cb_func);
		ear_batt_api_version =  BATTERY_RPC_VER_5_1;
	}

	if (IS_ERR(ear_client)) {
		rc = PTR_ERR(ear_client);
		pr_err("%s: ERROR: rpc_register_client: rc = %d\n ",
		       __func__, rc);
		ear_client = NULL;
		return rc;
	}

	return rc;
}
コード例 #8
0
static struct msm_rpc_client *ping_mdm_init(void)
{
	mutex_lock(&ping_mdm_lock);
	if (open_count == 0) {
		rpc_client = msm_rpc_register_client("pingdef",
						     PING_MDM_PROG,
						     PING_MDM_VERS, 1,
						     ping_mdm_cb_func);
		if (!IS_ERR(rpc_client))
			open_count++;
	}
	mutex_unlock(&ping_mdm_lock);
	return rpc_client;
}
コード例 #9
0
struct msm_rpc_client *oem_rapi_client_init(void)
{
	mutex_lock(&oem_rapi_client_lock);
	if (open_count == 0) {
		rpc_client = msm_rpc_register_client("oemrapiclient",
						     OEM_RAPI_PROG,
						     OEM_RAPI_VERS, 0,
						     oem_rapi_client_cb);
		if (!IS_ERR(rpc_client))
			open_count++;
	}
	mutex_unlock(&oem_rapi_client_lock);
	return rpc_client;
}
コード例 #10
0
ファイル: snd_pcm_client.c プロジェクト: F4uzan/f4kernel-u0
static int audio_open(struct inode *inode, struct file *file)
{
	struct audio *audio = &the_audio;
	int rc, cnt;

	mutex_lock(&audio->lock);

	if (audio->opened) {
		MM_ERR("busy as driver already in open state\n");
		rc = -EBUSY;
		goto done;
	}

	if (!audio->data) {
		audio->data = kmalloc(BUFSZ, GFP_KERNEL);
		if (!audio->data) {
			MM_ERR("could not allocate buffers\n");
			rc = -ENOMEM;
			goto done;
		}
	}

	audio->client = msm_rpc_register_client("voice_pcm_interface_client",
				SND_VOC_PCM_INTERFACE_PROG,
				SND_VOC_PCM_INTERFACE_VERS, 1,
				pcm_interface_process_callback_routine);
	if (IS_ERR(audio->client)) {
		MM_ERR("Failed to register voice pcm interface client"\
			"to 0x%8x\n", SND_VOC_PCM_INTERFACE_PROG);
		kfree(audio->data);
		audio->data = NULL;
		rc = -ENODEV;
		goto done;
	}
	MM_INFO("voice pcm client registred %p\n", audio->client);
	for (cnt = 0; cnt < MAX_VOC_FRAMES; cnt++) {
		audio->out[cnt].data = (audio->data +\
					((MAX_VOC_FRAME_SIZE * 2) * cnt));
		audio->out[cnt].size = MAX_VOC_FRAME_SIZE * 2;
		MM_DBG("data ptr = %p\n", audio->out[cnt].data);
	}
	file->private_data = audio;
	audio_flush(audio);
	audio->opened = 1;
	rc = 0;
done:
	mutex_unlock(&audio->lock);
	return rc;
}
コード例 #11
0
int msm_fsusb_rpc_init(struct msm_otg_ops *ops)
{
	host_ops = ops;
	client = msm_rpc_register_client("fsusb",
			PM_APP_OTG_PROG,
			PM_APP_OTG_VERS, 1,
			msm_fsusb_cb_func);
	if (IS_ERR(client)) {
		pr_err("%s: couldn't open rpc client\n", __func__);
		return PTR_ERR(client);
	}

	return 0;

}
コード例 #12
0
static int __init hs_rpc_cb_init(void)
{
	int rc = 0, i, num_vers;

	num_vers = ARRAY_SIZE(rpc_vers);

	for (i = 0; i < num_vers; i++) {
		rpc_client = msm_rpc_register_client("hs",
			HS_RPC_PROG, rpc_vers[i], 0, hs_cb_func);

		if (IS_ERR(rpc_client))
			pr_debug("%s: RPC Client version %d failed, fallback\n",
				 __func__, rpc_vers[i]);
		else
			break;
	}

	if (IS_ERR(rpc_client)) {
		pr_err("%s: Incompatible RPC version error %ld\n",
			 __func__, PTR_ERR(rpc_client));
		return PTR_ERR(rpc_client);
	}

	rc = msm_rpc_client_req(rpc_client, HS_SUBSCRIBE_SRVC_PROC,
				hs_rpc_register_subs_arg, NULL,
				hs_rpc_register_subs_res, NULL, -1);
	if (rc) {
		pr_err("%s: RPC client request failed for subscribe services\n",
						__func__);
		goto err_client_req;
	}
	#if 0
	rc = msm_rpc_client_req(rpc_client, HS_PROCESS_CMD_PROC,
			hs_rpc_pwr_cmd_arg, NULL,
			hs_rpc_pwr_cmd_res, NULL, -1);
	if (rc)
		pr_err("%s: RPC client request failed for pwr key"
			" delay cmd, using normal mode\n", __func__);
	#endif
	return 0;
err_client_req:
	msm_rpc_unregister_client(rpc_client);
	return rc;
}
コード例 #13
0
static int __init hs_rpc_cb_init(void)
{
	int rc = 0;

	rpc_client = msm_rpc_register_client("hs",
			HS_RPC_PROG, HS_RPC_VERS, 0, hs_cb_func);

	if (IS_ERR(rpc_client)) {
		pr_err("%s: couldn't open rpc client err %ld\n", __func__,
			 PTR_ERR(rpc_client));
		return PTR_ERR(rpc_client);
	}

	rc = msm_rpc_client_req(rpc_client, HS_SUBSCRIBE_SRVC_PROC,
				hs_rpc_register_subs_arg, NULL,
				hs_rpc_register_subs_res, NULL, -1);
	if (rc) {
		pr_err("%s: couldn't send rpc client request\n", __func__);
		msm_rpc_unregister_client(rpc_client);
	}

	return rc;
}
コード例 #14
0
ファイル: snd_adie.c プロジェクト: jiankeliu5/v889d_ics_3.0
/* Returns : client id on success
 *           and -1 on failure
 */
int adie_svc_get(void)
{
    int id, rc = 0;
    struct adie_svc_client_register_cb_args arg;

    mutex_lock(&adie_client_lock);
    for (id = 0; id < ADIE_SVC_MAX_CLIENTS; id++) {
        if (adie_client[id].client_id == -1 &&
                adie_client[id].rpc_client == NULL)
            break;
    }
    if (id == ADIE_SVC_MAX_CLIENTS) {
        mutex_unlock(&adie_client_lock);
        return -1;
    }

    mutex_lock(&adie_client[id].lock);
    adie_client[id].rpc_client = msm_rpc_register_client("adie_client",
                                 ADIE_SVC_PROG,
                                 ADIE_SVC_VERS, 1,
                                 adie_svc_rpc_cb_func);
    if (IS_ERR(adie_client[id].rpc_client)) {
        MM_ERR("Failed to register RPC client\n");
        adie_client[id].rpc_client = NULL;
        mutex_unlock(&adie_client[id].lock);
        mutex_unlock(&adie_client_lock);
        return -1;
    }
    mutex_unlock(&adie_client_lock);

    adie_client[id].adie_svc_cb_done = 0;
    arg.cb_id = id;
    adie_client[id].cb_id = arg.cb_id;
    mutex_unlock(&adie_client[id].lock);
    rc = msm_rpc_client_req(adie_client[id].rpc_client,
                            SND_ADIE_SVC_CLIENT_REGISTER_PROC,
                            adie_svc_client_register_arg, &arg,
                            NULL, NULL, -1);
    if (!rc) {
        rc = wait_event_interruptible(adie_client[id].wq,
                                      adie_client[id].adie_svc_cb_done);
        mutex_lock(&adie_client[id].lock);
        if (unlikely(rc < 0)) {
            if (rc == -ERESTARTSYS)
                MM_ERR("wait_event_interruptible "
                       "returned -ERESTARTSYS\n");
            else
                MM_ERR("wait_event_interruptible "
                       "returned error\n");
            rc = -1;
            goto err;
        }
        MM_DBG("Status %d received from CB function, id %d rc %d\n",
               adie_client[id].status, adie_client[id].client_id, rc);
        rc = id;
        if (adie_client[id].status == ADIE_SVC_STATUS_FAILURE) {
            MM_ERR("Received failed status for register request\n");
            rc = -1;
        } else
            goto done;
    } else {
        MM_ERR("Failed to send register client request\n");
        rc = -1;
        mutex_lock(&adie_client[id].lock);
    }
err:
    msm_rpc_unregister_client(adie_client[id].rpc_client);
    adie_client[id].rpc_client = NULL;
    adie_client[id].client_id = -1;
    adie_client[id].cb_id = MSM_RPC_CLIENT_NULL_CB_ID;
    adie_client[id].adie_svc_cb_done = 0;
done:
    mutex_unlock(&adie_client[id].lock);
    return rc;
}
コード例 #15
0
static int __devinit
msmrtc_probe(struct platform_device *pdev)
{
	int rc;
	struct msm_rtc *rtc_pdata = NULL;
	struct rpcsvr_platform_device *rdev =
		container_of(pdev, struct rpcsvr_platform_device, base);
	uint32_t prog_version;
#if defined(CONFIG_MACH_ACER_A4) || defined(CONFIG_MACH_ACER_A5)
	struct rtc_time tm;
#endif


	if (pdev->id == (TIMEREMOTE_PROG_VER_1 & RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_1;
	else if (pdev->id == (TIMEREMOTE_PROG_VER_2 &
			      RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_2;
	else
		return -EINVAL;

	rtc_pdata = kzalloc(sizeof(*rtc_pdata), GFP_KERNEL);
	if (rtc_pdata == NULL) {
		dev_err(&pdev->dev,
			"%s: Unable to allocate memory\n", __func__);
		return -ENOMEM;
	}
	rtc_pdata->rpc_client = msm_rpc_register_client("rtc", rdev->prog,
				prog_version, 1, msmrtc_cb_func);
	if (IS_ERR(rtc_pdata->rpc_client)) {
		dev_err(&pdev->dev,
			 "%s: init RPC failed! VERS = %x\n", __func__,
					prog_version);
		rc = PTR_ERR(rtc_pdata->rpc_client);
		kfree(rtc_pdata);
		return rc;
	}

	/*
	 * Set up the callback client.
	 * For older targets this initialization will fail
	 */
	rc = msmrtc_setup_cb(rtc_pdata);
	if (rc)
		dev_dbg(&pdev->dev, "%s: Could not initialize RPC callback\n",
								__func__);

	rtc_pdata->rtcalarm_time = 0;
	platform_set_drvdata(pdev, rtc_pdata);

#if defined(CONFIG_MACH_ACER_A4) || defined(CONFIG_MACH_ACER_A5)
	/* Set the default system time to 2011-03-01 00:00:00 UTC.
	 */
	msmrtc_timeremote_read_time(&pdev->dev, &tm);
	if (tm.tm_year < 90) {
		tm.tm_year = 111; /* RTC layer expects years to start at 1900 */
		tm.tm_mon  = 2;   /* RTC layer expects mons to be 0 based */
		tm.tm_mday = 1;
		tm.tm_hour = 0;
		tm.tm_min  = 0;
		tm.tm_sec  = 0;
		tm.tm_wday = 1;   /* 2011-03-01 is Tuesday */
		msmrtc_timeremote_set_time(&pdev->dev, &tm);
	}
#endif

	rtc_pdata->rtc = rtc_device_register("msm_rtc",
				  &pdev->dev,
				  &msm_rtc_ops,
				  THIS_MODULE);
	if (IS_ERR(rtc_pdata->rtc)) {
		dev_err(&pdev->dev, "%s: Can't register RTC device (%ld)\n",
		       pdev->name, PTR_ERR(rtc_pdata->rtc));
		rc = PTR_ERR(rtc_pdata->rtc);
		goto fail_cb_setup;
	}

#ifdef CONFIG_RTC_SECURE_TIME_SUPPORT
	rtc_pdata->rtcsecure = rtc_device_register("msm_rtc_secure",
				  &pdev->dev,
				  &msm_rtc_ops_secure,
				  THIS_MODULE);

	if (IS_ERR(rtc_pdata->rtcsecure)) {
		dev_err(&pdev->dev,
			"%s: Can't register RTC Secure device (%ld)\n",
		       pdev->name, PTR_ERR(rtc_pdata->rtcsecure));
		rtc_device_unregister(rtc_pdata->rtc);
		rc = PTR_ERR(rtc_pdata->rtcsecure);
		goto fail_cb_setup;
	}
#endif

#ifdef CONFIG_RTC_ASYNC_MODEM_SUPPORT
	rtc_hctosys();
#endif

	return 0;

fail_cb_setup:
	msm_rpc_unregister_client(rtc_pdata->rpc_client);
	kfree(rtc_pdata);
	return rc;
}
コード例 #16
0
static int __devinit tricolor_led_probe(struct platform_device *pdev)
{
	const struct led_platform_data *pdata = pdev->dev.platform_data;
	struct msm_rpc_client *rpc_client;
	struct led_info *curr_led;
	struct tricolor_led_data *led, *tmp_led;
	int rc, i, j;

	if (!pdata) {
		dev_err(&pdev->dev, "platform data not supplied\n");
		return -EINVAL;
	}

	/* initialize rpc client */
	rpc_client = msm_rpc_register_client("led", LED_RPC_PROG,
					LED_RPC_VER, 0, led_cb_func);
	rc = IS_ERR(rpc_client);
	if (rc) {
		dev_err(&pdev->dev, "failed to initialize rpc_client\n");
		return -EINVAL;
	}

	/* subscribe */
	rc = msm_rpc_client_req(rpc_client, LED_SUBSCRIBE_PROC,
				led_rpc_register_subs_arg, NULL,
				led_rpc_res, NULL, -1);
	if (rc) {
		pr_err("%s: RPC client request failed for subscribe services\n",
						__func__);
		goto fail_mem_alloc;
	}

	led = devm_kzalloc(&pdev->dev, pdata->num_leds * sizeof(*led),
							GFP_KERNEL);
	if (!led) {
		dev_err(&pdev->dev, "failed to alloc memory\n");
		rc = -ENOMEM;
		goto fail_mem_alloc;
	}

	for (i = 0; i < pdata->num_leds; i++) {
		curr_led	= &pdata->leds[i];
		tmp_led		= &led[i];

		tmp_led->cdev.name		= curr_led->name;
		tmp_led->cdev.default_trigger   = curr_led->default_trigger;
		tmp_led->cdev.brightness_set    = tricolor_led_set;
		tmp_led->cdev.brightness_get    = tricolor_led_get;
		tmp_led->cdev.brightness	= LED_OFF;
		tmp_led->cdev.max_brightness	= LED_FULL;
		tmp_led->color			= curr_led->flags;
		tmp_led->rpc_client		= rpc_client;
		tmp_led->blink_status		= false;

		mutex_init(&tmp_led->lock);

		rc = led_classdev_register(&pdev->dev, &tmp_led->cdev);
		if (rc) {
			dev_err(&pdev->dev, "failed to register led %s(%d)\n",
						 tmp_led->cdev.name, rc);
			goto fail_led_reg;
		}

		/* Add blink attributes */
		rc = device_create_file(tmp_led->cdev.dev, &dev_attr_blink);
		if (rc) {
			dev_err(&pdev->dev, "failed to create blink attr\n");
			goto fail_blink_attr;
		}
		dev_set_drvdata(tmp_led->cdev.dev, tmp_led);
	}

	platform_set_drvdata(pdev, led);

	return 0;

fail_blink_attr:
	j = i;
	while (j)
		device_remove_file(led[--j].cdev.dev, &dev_attr_blink);
	i++;
fail_led_reg:
	while (i) {
		led_classdev_unregister(&led[--i].cdev);
		mutex_destroy(&led[i].lock);
	}
fail_mem_alloc:
	msm_rpc_unregister_client(rpc_client);
	return rc;
}
コード例 #17
0
ファイル: rtc-msm.c プロジェクト: Austrie/SpeedDemon-Kernel
static int
msmrtc_probe(struct platform_device *pdev)
{
	int rc;
	struct rpcsvr_platform_device *rdev =
		container_of(pdev, struct rpcsvr_platform_device, base);
	uint32_t prog_version;

	if (pdev->id == (TIMEREMOTE_PROG_VER_1 & RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_1;
	else if (pdev->id == (TIMEREMOTE_PROG_VER_2 &
			      RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_2;
	else
		return -EINVAL;

	rpc_client = msm_rpc_register_client("rtc", rdev->prog,
				prog_version, 1, msmrtc_cb_func);
	if (IS_ERR(rpc_client)) {
		pr_err("%s: init RPC failed! VERS = %x\n", __func__,
					prog_version);
		return PTR_ERR(rpc_client);
	}

	/*
	 * Set up the callback client.
	 * For older targets this initialization will fail
	 */
	rc = msmrtc_setup_cb();
	if (rc)
		pr_debug("%s: Could not initialize RPC callback\n",
								__func__);

	rtc = rtc_device_register("msm_rtc",
				  &pdev->dev,
				  &msm_rtc_ops,
				  THIS_MODULE);
	if (IS_ERR(rtc)) {
		pr_err("%s: Can't register RTC device (%ld)\n",
		       pdev->name, PTR_ERR(rtc));
		rc = PTR_ERR(rtc);
		goto fail_cb_setup;
	}

#ifdef CONFIG_RTC_SECURE_TIME_SUPPORT
	rtcsecure = rtc_device_register("msm_rtc_secure",
				  &pdev->dev,
				  &msm_rtc_ops_secure,
				  THIS_MODULE);

	if (IS_ERR(rtcsecure)) {
		pr_err("%s: Can't register RTC Secure device (%ld)\n",
		       pdev->name, PTR_ERR(rtcsecure));
		rtc_device_unregister(rtc);
		rc = PTR_ERR(rtcsecure);
		goto fail_cb_setup;
	}
#endif

#ifdef CONFIG_RTC_ASYNC_MODEM_SUPPORT
	rtc_hctosys();
#endif

	return 0;

fail_cb_setup:
	msm_rpc_unregister_client(rpc_client);
	return rc;
}
コード例 #18
0
static int
msmrtc_probe(struct platform_device *pdev)
{
	int rc;
	struct rpcsvr_platform_device *rdev =
		container_of(pdev, struct rpcsvr_platform_device, base);
	uint32_t prog_version;
#ifdef CONFIG_MACH_ACER_A4
	struct rtc_time tm;
#endif
	if (pdev->id == (TIMEREMOTE_PROG_VER_1 & RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_1;
	else if (pdev->id == (TIMEREMOTE_PROG_VER_2 &
			      RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_2;
	else
		return -EINVAL;

	rpc_client = msm_rpc_register_client("rtc", rdev->prog,
				prog_version, 1, msmrtc_cb_func);
	if (IS_ERR(rpc_client)) {
		pr_err("%s: init RPC failed! VERS = %x\n", __func__,
					prog_version);
		return PTR_ERR(rpc_client);
	}
#ifdef CONFIG_MACH_ACER_A4
	/* Set the default system time to 2010-10-01 00:00:00 UTC.
	 */
	msmrtc_timeremote_read_time(&pdev->dev, &tm);
	if (tm.tm_year < 90) {
		tm.tm_year = 110; /* RTC layer expects years to start at 1900 */
		tm.tm_mon  = 9;  /* RTC layer expects mons to be 0 based */
		tm.tm_mday = 1;
		tm.tm_hour = 0;
		tm.tm_min  = 0;
		tm.tm_sec  = 0;
		tm.tm_wday = 4;   /* 2010-10-01 is Fri. */
		msmrtc_timeremote_set_time(&pdev->dev, &tm);
	}
#endif
	/*
	 * Set up the callback client.
	 * For older targets this initialization will fail
	 */
	rc = msmrtc_setup_cb();
	if (rc)
		pr_debug("%s: Could not initialize RPC callback\n",
								__func__);

	rtc = rtc_device_register("msm_rtc",
				  &pdev->dev,
				  &msm_rtc_ops,
				  THIS_MODULE);
	if (IS_ERR(rtc)) {
		printk(KERN_ERR "%s: Can't register RTC device (%ld)\n",
		       pdev->name, PTR_ERR(rtc));
		rc = PTR_ERR(rtc);
		goto fail_cb_setup;
	}

#ifdef CONFIG_RTC_SECURE_TIME_SUPPORT
	rtcsecure = rtc_device_register("msm_rtc_secure",
				  &pdev->dev,
				  &msm_rtc_ops_secure,
				  THIS_MODULE);

	if (IS_ERR(rtcsecure)) {
		printk(KERN_ERR "%s: Can't register RTC Secure device (%ld)\n",
		       pdev->name, PTR_ERR(rtcsecure));
		rtc_device_unregister(rtc);
		rc = PTR_ERR(rtcsecure);
		goto fail_cb_setup;
	}
#endif

	return 0;

fail_cb_setup:
	msm_rpc_unregister_client(rpc_client);
	return rc;
}
コード例 #19
0
static int __devinit
msmrtc_probe(struct platform_device *pdev)
{
	int rc;
	struct msm_rtc *rtc_pdata = NULL;
	struct rpcsvr_platform_device *rdev =
		container_of(pdev, struct rpcsvr_platform_device, base);
	uint32_t prog_version;


	if (pdev->id == (TIMEREMOTE_PROG_VER_1 & RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_1;
	else if (pdev->id == (TIMEREMOTE_PROG_VER_2 &
			      RPC_VERSION_MAJOR_MASK))
		prog_version = TIMEREMOTE_PROG_VER_2;
	else
		return -EINVAL;

	rtc_pdata = kzalloc(sizeof(*rtc_pdata), GFP_KERNEL);
	if (rtc_pdata == NULL) {
		dev_err(&pdev->dev,
			"%s: Unable to allocate memory\n", __func__);
		return -ENOMEM;
	}
	rtc_pdata->rpc_client = msm_rpc_register_client("rtc", rdev->prog,
				prog_version, 1, msmrtc_cb_func);
	if (IS_ERR(rtc_pdata->rpc_client)) {
		dev_err(&pdev->dev,
			 "%s: init RPC failed! VERS = %x\n", __func__,
					prog_version);
		rc = PTR_ERR(rtc_pdata->rpc_client);
		kfree(rtc_pdata);
		return rc;
	}
	
	/*< DTS2011052803245  wangjiongfeng 20110531 begin */
	huawei_alarm_client = rtc_pdata->rpc_client;
	/* DTS2011052803245  wangjiongfeng 20110531 end >*/

	/*
	 * Set up the callback client.
	 * For older targets this initialization will fail
	 */
	rc = msmrtc_setup_cb(rtc_pdata);
	if (rc)
		dev_dbg(&pdev->dev, "%s: Could not initialize RPC callback\n",
								__func__);

	rtc_pdata->rtcalarm_time = 0;
	platform_set_drvdata(pdev, rtc_pdata);

	rtc_pdata->rtc = rtc_device_register("msm_rtc",
				  &pdev->dev,
				  &msm_rtc_ops,
				  THIS_MODULE);
	if (IS_ERR(rtc_pdata->rtc)) {
		dev_err(&pdev->dev, "%s: Can't register RTC device (%ld)\n",
		       pdev->name, PTR_ERR(rtc_pdata->rtc));
		rc = PTR_ERR(rtc_pdata->rtc);
		goto fail_cb_setup;
	}

#ifdef CONFIG_RTC_SECURE_TIME_SUPPORT
	rtc_pdata->rtcsecure = rtc_device_register("msm_rtc_secure",
				  &pdev->dev,
				  &msm_rtc_ops_secure,
				  THIS_MODULE);

	if (IS_ERR(rtc_pdata->rtcsecure)) {
		dev_err(&pdev->dev,
			"%s: Can't register RTC Secure device (%ld)\n",
		       pdev->name, PTR_ERR(rtc_pdata->rtcsecure));
		rtc_device_unregister(rtc_pdata->rtc);
		rc = PTR_ERR(rtc_pdata->rtcsecure);
		goto fail_cb_setup;
	}
#endif

#ifdef CONFIG_RTC_ASYNC_MODEM_SUPPORT
	rtc_hctosys();
#endif

	return 0;

fail_cb_setup:
	msm_rpc_unregister_client(rtc_pdata->rpc_client);
	kfree(rtc_pdata);
	return rc;
}