Skip to content

Commit

Permalink
Make sure clean-up happens also when we use a dynamic mode
Browse files Browse the repository at this point in the history
Signed-off-by: Philippe De Swert <philippe.deswert@jollamobile.com>
  • Loading branch information
philippedeswert committed Jun 19, 2013
1 parent fae6e2e commit 3172d38
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 15 deletions.
35 changes: 22 additions & 13 deletions src/usb_moded-modesetting.c
Expand Up @@ -279,24 +279,17 @@ int set_ovi_suite_mode(void)
}
#endif /* N900 */

int set_dynamic_mode(struct mode_list_elem *data)
int set_dynamic_mode(void)
{

struct mode_list_elem *data;

data = get_usb_mode_data();

#ifdef APP_SYNC
if(data->appsync)
activate_sync(data->mode_name);
#endif
if(data->network)
{
#ifdef DEBIAN
char command[256];

g_snprintf(command, 256, "ifdown %s ; ifup %s", data->network_interface, data->network_interface);
system(command);
#else
usb_network_down(data);
usb_network_up(data);
#endif /* DEBIAN */
}

/* set functionality first, then enable */
if(data->sysfs_path)
Expand All @@ -309,6 +302,19 @@ int set_dynamic_mode(struct mode_list_elem *data)
write_to_file(data->softconnect_path, data->softconnect);
}

/* functionality should be enabled, so we can enable the network now */
if(data->network)
{
#ifdef DEBIAN
char command[256];

g_snprintf(command, 256, "ifdown %s ; ifup %s", data->network_interface, data->network_interface);
system(command);
#else
usb_network_down(data);
usb_network_up(data);
#endif /* DEBIAN */
}
return(0);
}

Expand All @@ -318,6 +324,7 @@ void unset_dynamic_mode(void)
struct mode_list_elem *data;

data = get_usb_mode_data();

/* the modelist could be empty */
if(!data)
return;
Expand Down Expand Up @@ -456,6 +463,8 @@ int usb_moded_mode_cleanup(const char *module)
system("umount /dev/mtp");
}

if(get_usb_mode_data())
unset_dynamic_mode();

return(ret);
}
Expand Down
2 changes: 1 addition & 1 deletion src/usb_moded-modesetting.h
Expand Up @@ -29,7 +29,7 @@ int write_to_file(const char *path, const char *text);
int set_mass_storage_mode(void);
int set_ovi_suite_mode(void);
int set_mtp_mode(void);
int set_dynamic_mode(struct mode_list_elem *data);
int set_dynamic_mode(void);
void unset_dynamic_mode(void);
/* clean up for the mode changes on disconnect */
int usb_moded_mode_cleanup(const char *module);
Expand Down
2 changes: 1 addition & 1 deletion src/usb_moded.c
Expand Up @@ -281,7 +281,7 @@ void set_usb_mode(const char *mode)
check_module_state(data->mode_module);
set_usb_module(data->mode_module);
ret = usb_moded_load_module(data->mode_module);
ret = set_dynamic_mode(data);
ret = set_dynamic_mode();
set_usb_mode_data(data);
}
}
Expand Down

0 comments on commit 3172d38

Please sign in to comment.