[14/17] DVB:Siano drivers - support platform whcih doesn't have request firmware deamon (used in android)
Commit Message
Hi,
This patch step support platform whcih doesn't have request firmware
deamon (used in android).
Thanks,
Doron Cohen
-----------------------
From 3e0060fc7cfdbd5844e9a644b6d2927a406cde20 Mon Sep 17 00:00:00 2001
From: Doron Cohen <doronc@siano-ms.com>
Date: Tue, 20 Sep 2011 08:37:43 +0300
Subject: [PATCH 18/21] Support platform which doesn't have
request_firmware deamon. Allow loading firmware from application without
using request_firmware API
---
drivers/media/dvb/siano/smscoreapi.c | 77
++++++++++++++++++++++++++++++++-
1 files changed, 74 insertions(+), 3 deletions(-)
kmutex_lock(&g_smscore_deviceslock);
@@ -1614,7 +1685,7 @@ void smscore_unregister_client(struct
smscore_client_t *client)
kfree(identry);
}
- sms_info("%p", client->context);
+ sms_info("unregister client 0x%p", client->context);
list_del(&client->entry);
kfree(client);
Comments
Em 20-09-2011 07:31, Doron Cohen escreveu:
> Hi,
> This patch step support platform whcih doesn't have request firmware
> deamon (used in android).
> Thanks,
> Doron Cohen
>
> -----------------------
>>From 3e0060fc7cfdbd5844e9a644b6d2927a406cde20 Mon Sep 17 00:00:00 2001
> From: Doron Cohen <doronc@siano-ms.com>
> Date: Tue, 20 Sep 2011 08:37:43 +0300
> Subject: [PATCH 18/21] Support platform which doesn't have
> request_firmware deamon. Allow loading firmware from application without
> using request_firmware API
NACK.
>
> ---
> drivers/media/dvb/siano/smscoreapi.c | 77
> ++++++++++++++++++++++++++++++++-
> 1 files changed, 74 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/dvb/siano/smscoreapi.c
> b/drivers/media/dvb/siano/smscoreapi.c
> index 459c6e9..bb92351 100644
> --- a/drivers/media/dvb/siano/smscoreapi.c
> +++ b/drivers/media/dvb/siano/smscoreapi.c
> @@ -507,12 +507,83 @@ static int smscore_init_ir(struct smscore_device_t
> *coredev)
> */
> int smscore_start_device(struct smscore_device_t *coredev)
> {
> - int rc = smscore_set_device_mode(
> - coredev, smscore_registry_getmode(coredev->devpath));
> + int rc = 0;
> + int board_id = smscore_get_board_id(coredev);
> +
> +#ifdef REQUEST_FIRMWARE_SUPPORTED
> + int mode;
> + int type = sms_get_board(board_id)->type;
> + if (type == SMS_UNKNOWN_TYPE)
> + type = smscore_registry_gettype(coredev->devpath);
> + sms_info ("starting device type %d", type);
> + /*
> + * first, search operation mode in the registry, with
> + * the limitation of type-mode compatability.
> + * if firmware donload fails, get operation mode from
> + * sms_boards
> + * for spi, type = SMS_UNKNOWN_TYPE and board_id = SMS_BOARD_UNKNOWN
> + * so always default_mode is set
> + */
> + switch (type) {
> + case SMS_UNKNOWN_TYPE:
> + mode = default_mode;
> + break;
> + case SMS_STELLAR:
> + case SMS_NOVA_A0:
> + case SMS_NOVA_B0:
> + case SMS_PELE:
> + case SMS_RIO:
> + mode = smscore_registry_getmode(coredev->devpath);
> + sms_info ("mode for path %s in registry %d", coredev->devpath,
> mode);
> + if (mode == SMSHOSTLIB_DEVMD_CMMB)
> + mode = (default_mode == SMSHOSTLIB_DEVMD_CMMB) ?
> SMSHOSTLIB_DEVMD_NONE : default_mode;
> + break;
> + case SMS_DENVER_1530:
> + mode = SMSHOSTLIB_DEVMD_ATSC;
> + break;
> + case SMS_DENVER_2160:
> + mode = SMSHOSTLIB_DEVMD_DAB_TDMB;
> + break;
> + case SMS_VEGA:
> + case SMS_VENICE:
> + case SMS_MING:
> + mode = SMSHOSTLIB_DEVMD_CMMB;
> + break;
> + default:
> + mode = SMSHOSTLIB_DEVMD_NONE;
> + }
> +
> + /* first try */
> + sms_info ("mode after adjustment %d", mode);
> + rc = smscore_set_device_mode(coredev, mode);
> +
> + if (rc < 0) {
> + sms_info("set device mode to %d failed", mode);
> +
> + /*
> + * don't try again on spi mode, or if the mode from
> + * sms_boards is identical to the previous mode
> + */
> + if ((board_id == SMS_BOARD_UNKNOWN) ||
> + (mode == sms_get_board(board_id)->default_mode))
> + return -ENOEXEC;
> +
> + /* second try */
> + mode = sms_get_board(board_id)->default_mode;
> + rc = smscore_set_device_mode(coredev, mode);
> + if (rc < 0) {
> + sms_info("set device mode to %d failed", mode);
> + return -ENOEXEC ;
> + }
> + }
> + sms_info("set device mode succeeded");
> +
> + rc = smscore_configure_board(coredev);
> if (rc < 0) {
> sms_info("configure board failed , rc %d", rc);
> return rc;
> }
> +#endif
>
> kmutex_lock(&g_smscore_deviceslock);
>
> @@ -1614,7 +1685,7 @@ void smscore_unregister_client(struct
> smscore_client_t *client)
> kfree(identry);
> }
>
> - sms_info("%p", client->context);
> + sms_info("unregister client 0x%p", client->context);
>
> list_del(&client->entry);
> kfree(client);
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
b/drivers/media/dvb/siano/smscoreapi.c
@@ -507,12 +507,83 @@ static int smscore_init_ir(struct smscore_device_t
*coredev)
*/
int smscore_start_device(struct smscore_device_t *coredev)
{
- int rc = smscore_set_device_mode(
- coredev, smscore_registry_getmode(coredev->devpath));
+ int rc = 0;
+ int board_id = smscore_get_board_id(coredev);
+
+#ifdef REQUEST_FIRMWARE_SUPPORTED
+ int mode;
+ int type = sms_get_board(board_id)->type;
+ if (type == SMS_UNKNOWN_TYPE)
+ type = smscore_registry_gettype(coredev->devpath);
+ sms_info ("starting device type %d", type);
+ /*
+ * first, search operation mode in the registry, with
+ * the limitation of type-mode compatability.
+ * if firmware donload fails, get operation mode from
+ * sms_boards
+ * for spi, type = SMS_UNKNOWN_TYPE and board_id = SMS_BOARD_UNKNOWN
+ * so always default_mode is set
+ */
+ switch (type) {
+ case SMS_UNKNOWN_TYPE:
+ mode = default_mode;
+ break;
+ case SMS_STELLAR:
+ case SMS_NOVA_A0:
+ case SMS_NOVA_B0:
+ case SMS_PELE:
+ case SMS_RIO:
+ mode = smscore_registry_getmode(coredev->devpath);
+ sms_info ("mode for path %s in registry %d", coredev->devpath,
mode);
+ if (mode == SMSHOSTLIB_DEVMD_CMMB)
+ mode = (default_mode == SMSHOSTLIB_DEVMD_CMMB) ?
SMSHOSTLIB_DEVMD_NONE : default_mode;
+ break;
+ case SMS_DENVER_1530:
+ mode = SMSHOSTLIB_DEVMD_ATSC;
+ break;
+ case SMS_DENVER_2160:
+ mode = SMSHOSTLIB_DEVMD_DAB_TDMB;
+ break;
+ case SMS_VEGA:
+ case SMS_VENICE:
+ case SMS_MING:
+ mode = SMSHOSTLIB_DEVMD_CMMB;
+ break;
+ default:
+ mode = SMSHOSTLIB_DEVMD_NONE;
+ }
+
+ /* first try */
+ sms_info ("mode after adjustment %d", mode);
+ rc = smscore_set_device_mode(coredev, mode);
+
+ if (rc < 0) {
+ sms_info("set device mode to %d failed", mode);
+
+ /*
+ * don't try again on spi mode, or if the mode from
+ * sms_boards is identical to the previous mode
+ */
+ if ((board_id == SMS_BOARD_UNKNOWN) ||
+ (mode == sms_get_board(board_id)->default_mode))
+ return -ENOEXEC;
+
+ /* second try */
+ mode = sms_get_board(board_id)->default_mode;
+ rc = smscore_set_device_mode(coredev, mode);
+ if (rc < 0) {
+ sms_info("set device mode to %d failed", mode);
+ return -ENOEXEC ;
+ }
+ }
+ sms_info("set device mode succeeded");
+
+ rc = smscore_configure_board(coredev);
if (rc < 0) {
sms_info("configure board failed , rc %d", rc);
return rc;
}
+#endif