diff --git a/drivers/staging/westbridge/astoria/device/cyasdevice.c b/drivers/staging/westbridge/astoria/device/cyasdevice.c index 9b5bc53c990c..c76e38375010 100644 --- a/drivers/staging/westbridge/astoria/device/cyasdevice.c +++ b/drivers/staging/westbridge/astoria/device/cyasdevice.c @@ -48,6 +48,8 @@ typedef struct cyasdevice { cy_as_device_handle dev_handle; /* Handle to the HAL */ cy_as_hal_device_tag hal_tag; + spinlock_t common_lock; + unsigned long flags; } cyasdevice; /* global ptr to astoria device */ @@ -126,6 +128,20 @@ static void cy_misc_callback(cy_as_device_handle h, } } +void cy_as_acquire_common_lock() +{ + spin_lock_irqsave(&cy_as_device_controller->common_lock, + cy_as_device_controller->flags); +} +EXPORT_SYMBOL(cy_as_acquire_common_lock); + +void cy_as_release_common_lock() +{ + spin_unlock_irqrestore(&cy_as_device_controller->common_lock, + cy_as_device_controller->flags); +} +EXPORT_SYMBOL(cy_as_release_common_lock); + /* reset astoria and reinit all regs */ #define PNAND_REG_CFG_INIT_VAL 0x0000 void hal_reset(cy_as_hal_device_tag tag) @@ -331,6 +347,8 @@ static int cyasdevice_initialize(void) ((ver_data.is_debug_mode) ? "debug" : "release"), ver_data.major, ver_data.minor, ver_data.build, str); + spin_lock_init(&cy_as_dev->common_lock); + /* done now */ cy_as_device_controller = cy_as_dev;